`时间限制还是滥用?ValueError:与指定的格式不匹配

2024-06-02 05:08:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我似乎无法将包含日期字符串的序列转换为dtypedatetime64。 以下代码再现错误:

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。为什么?我该怎么解决这个问题?你知道吗

注:像9999/12/31这样的日期是相关的,因此我想保持原样。你知道吗

干杯


Tags: totrueformatdatetimedatedtreturnsseries
1条回答
网友
1楼 · 发布于 2024-06-02 05:08:31

这里的值year9999无效,因此转换为NaT需要errors='coerce'

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

使用datetimes时会引发错误:

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: Out of bounds nanosecond timestamp: 9999-12-31 00:00:00

相关问题 更多 >