python - 替换 pandas 中输入错误的日期

标签 python pandas

我有一个 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/

相关文章:

python - pandas - 如何在有条件的 groupby 中创建多列?

Python 脚本在后台运行时挂起

python - 使用输入定义 Python 函数

python - 前后下划线的python属性有什么区别

python - 如何在条形图上添加值标签

python - 保留/切片 Pandas 中的特定列

Python如何制作 "associative array"

python - 将标签锚定在角落?

python - 使用 pandas 对 OHLC 数据重新采样

python - 在 Python 中使用 ix 对 DataFrame 进行子集化