在pandas中替换错误输入的日期

时间:2016-12-12 12:11:29

标签: python pandas

我有一个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或空白?

1 个答案:

答案 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