`to_datetime` лимит или неправильное использование? ValueError: не соответствует указанному формату - PullRequest
1 голос
/ 08 июля 2019

Не получается преобразовать серию, содержащую строки даты, в dtype из datetime64. Следующий код воспроизводит ошибку:

import pandas as pd

gud_date_s = pd.Series(["2019/12/31 00:00:00.0"]*100)
gud_date_s2 = pd.Series(["2261/12/31 00:00:00.0"]*100)
bad_date_s = pd.Series(["9999/12/31 00:00:00.0"]*100)
bad_date_s2 = pd.Series(["2262/12/31 00:00:00.0"]*100)


gd1 = pd.to_datetime(gud_date_s, format="%Y/%m/%d", yearfirst=True).dt.date # Correct
gd2 = pd.to_datetime(gud_date_s2 , format="%Y/%m/%d", yearfirst=True).dt.date # Correct
bd1 = pd.to_datetime(bad_date_s, format="%Y/%m/%d", yearfirst=True).dt.date 
#Returns {ValueError}time data 9999/12/31 00:00:00.0 doesn't match format specified.
bd2 = pd.to_datetime(bad_date_s2 , format="%Y/%m/%d", yearfirst=True).dt.date
#Returns {ValueError}time data 2262/12/31 00:00:00.0 doesn't match format specified.

Таким образом, порог принятых лет кажется 2261. Зачем? Как мне это исправить?

N.B: даты, такие как 9999/12/31, имеют значение, поэтому я хотел бы оставить их как есть.

Приветствия

1 Ответ

1 голос
/ 08 июля 2019

Здесь недопустимое значение года 9999, поэтому необходимо errors='coerce' для преобразования в NaT:

bd1 = pd.to_datetime(bad_date_s, format="%Y/%m/%d", yearfirst=True, errors='coerce').dt.date

И здесь возникает ошибка, потому что предел , год правильный, но максимальный месяц и день только 11th April:

К сожалению, здесь ошибка должна быть более ясной.

bd2 = pd.to_datetime(bad_date_s2 , format="%Y/%m/%d", yearfirst=True, errors='coerce').dt.date

print (pd.Timestamp.max)
2262-04-11 23:47:16.8547758

Для работы с datetime выдается ошибка:

from datetime import datetime

d = datetime(year=9999, month=12, day=31)
bd1 = pd.to_datetime(bad_date_s, format="%Y/%m/%d", yearfirst=True, errors='coerce').dt.date.fillna(d)
print (bd1)

OutOfBoundsDatetime: временная метка наносекундной границы: 9999-12-31 00: 00: 00

...