В обрабатываемых данных метки времени имеются недопустимые или непредвиденные значения, например отрицательные годы или нулевые значения. Чтобы решить эту проблему, нам необходимо убедиться, что значения меток времени имеют правильный формат и находятся в допустимом диапазоне для преобразования в объекты даты и времени Python.
import psycopg2
import pandas as pd
# Create a cursor object
cur = conn.cursor()
# Execute your SQL query to access a table
try:
# Retrieve the minimum date
cur.execute("""
SELECT MIN(dt_date)
FROM prod_external.tran_y_register
WHERE entry_type = 1;
""")
min_date = cur.fetchone()[0] # Get the minimum date from the result
# Fetch all data from the table starting from the minimum date
cur.execute("""
SELECT *
FROM prod_external.tran_y_register
WHERE entry_type = 1
AND dt_date >= %s
ORDER BY dt_date;
""", (min_date,))
# Fetch rows as tuples
rows = cur.fetchall()
# Extract column names
column_names = [desc[0] for desc in cur.description]
# Convert rows to DataFrame
df = pd.DataFrame(rows, columns=column_names)
# Convert 'dt_date' column to Pandas Timestamp objects manually
df['dt_date'] = pd.to_datetime(df['dt_date'], errors='coerce') # Handle any invalid timestamps
# Drop rows with NaT (invalid timestamps)
df.dropna(subset=['dt_date'], inplace=True)
# Print DataFrame
print(df)
except psycopg2.Error as e:
print("Error: Could not fetch data from the table")
print(e)
# Close cursor and connection
cur.close()
conn.close()
я получаю сообщение об ошибке: ValueError: год -1 выходит за пределы диапазона
Ошибка, с которой вы столкнулись, указывает на то, что в ваших данных временной метки есть отрицательные годы, которые выходят за пределы диапазона для преобразования в объекты даты и времени Python. Чтобы решить эту проблему, вы можете предварительно обработать данные для обработки недопустимых или неожиданных значений перед преобразованием их в объекты datetime.
df = df[df['dt_date'].dt.year > 0]
print(df)