“ to_datetime”限制或滥用? ValueError:与指定的格式不匹配

时间:2019-07-08 11:38:49

标签: python python-3.x pandas datetime datetime-format

我似乎无法将包含日期字符串的系列转换为dtype的{​​{1}}。 以下代码重现该错误:

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之类的日期是相关的,因此我希望保持原样。

欢呼

1 个答案:

答案 0 :(得分:1)

这里不是有效值年份9999,因此必须errors='coerce'才能转换为NaT

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

这是引发错误,因为limit,年份是正确的,但最大月份和日期仅为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

使用日期时间会引发错误:

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