我有一个 CSV 数据集,然后将其导入到 Pandas 中。只有少数日期输入错误,例如: 17/12/0089(注意这是 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 或空白?
最佳答案
在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
默认情况下,如果条件 True
返回 NaT
:
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
关于python - 替换 pandas 中输入错误的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41100662/