我有一个CSV数据集,然后导入到Pandas中。只有少数日期输入不正确,例如1989年12月17日(请注意这是dd / mm / yyyy)或有时12/11/1898因为这个日期很久以前就不行了。
我需要比较日期,以便我使用:
df_to_add['DOB'] = pd.to_datetime(df_to_add['DOB'], dayfirst=True)
但是当遇到其中一些不正确的日期时,我收到了消息 pandas.tslib.OutOfBoundsDatetime:超出界限纳秒时间戳:964-11-16 00:00:00
如何将所有错误输入的日期替换为NaT或空白?
答案 0 :(得分:2)
在to_datetime
中添加参数errors='coerce'
,以便将错误值转换为NaT
:
df_to_add['DOB'] = pd.to_datetime(df_to_add['DOB'], dayfirst=True, errors='coerce')
样品:
df_to_add = pd.DataFrame({'DOB':['12/11/1898','17/12/0089','05/12/2016']})
print (df_to_add)
DOB
0 12/11/1898
1 17/12/0089
2 05/12/2016
df_to_add['DOB'] = pd.to_datetime(df_to_add['DOB'], dayfirst=True, errors='coerce')
print (df_to_add)
DOB
0 1898-11-12
1 NaT
2 2016-12-05
如果需要通过某个阈值转换为NaT
,请使用mask
,如果条件为NaT
,则默认返回True
:
year = 1900
df_to_add['DOB'] = pd.to_datetime(df_to_add['DOB'], dayfirst=True, errors='coerce')
df_to_add['DOB'] = df_to_add['DOB'].mask(df_to_add['DOB'].dt.year < year)
print (df_to_add)
DOB
0 NaT
1 NaT
2 2016-12-05