«ValueError: год -1 выходит за пределы диапазона» - ошибка при попытке импортировать данные

В обрабатываемых данных метки времени имеются недопустимые или непредвиденные значения, например отрицательные годы или нулевые значения. Чтобы решить эту проблему, нам необходимо убедиться, что значения меток времени имеют правильный формат и находятся в допустимом диапазоне для преобразования в объекты даты и времени 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 есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
95
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка, с которой вы столкнулись, указывает на то, что в ваших данных временной метки есть отрицательные годы, которые выходят за пределы диапазона для преобразования в объекты даты и времени Python. Чтобы решить эту проблему, вы можете предварительно обработать данные для обработки недопустимых или неожиданных значений перед преобразованием их в объекты datetime.

df = df[df['dt_date'].dt.year > 0]

print(df)

Другие вопросы по теме