Python 用于更正损坏日期值的脚本

Python 用于更正损坏日期值的脚本,python,pandas,datetime,Python,Pandas,Datetime,我的dataframe包含许多不正确的日期时间值,这些值被输入这些数据的人大量输入。错误主要是2019-11-12输入为0019-12-12,2018输入为0018。它们太多了,所以我想拿出一个脚本来大规模地纠正它们。我使用了以下代码: df['A'].loc[df.A.dt.year<100]=df.A.dt.year+2000 df['A'].loc[df.A.dt.year这是因为时间戳的限制:请参见这篇关于超限纳秒时间戳的文章 因此,我建议在将该列转换为datetime列之前将其

我的dataframe包含许多不正确的日期时间值,这些值被输入这些数据的人大量输入。错误主要是2019-11-12输入为0019-12-12,2018输入为0018。它们太多了,所以我想拿出一个脚本来大规模地纠正它们。我使用了以下代码:

df['A'].loc[df.A.dt.year<100]=df.A.dt.year+2000

df['A'].loc[df.A.dt.year这是因为时间戳的限制:请参见这篇关于超限纳秒时间戳的文章

因此,我建议在将该列转换为datetime列之前将其更正为字符串,如下所示:

import pandas as pd
import re
df = pd.DataFrame({"A": ["2019-10-04", "0019-04-02", "0018-06-08", "2018-07-08"]})

# I look for every date starting with zero and another number and replace by 20
r = re.compile(r"^0[0-9]{1}")
df["A"] = df["A"].apply(lambda x: r.sub('20', x))
# then I transform to datetime
df["A"] = pd.to_datetime(df["A"], format='%Y-%m-%d')
df
结果如下

          A
0 2019-10-04
1 2019-04-02
2 2018-06-08
3 2018-07-08

在应用此选项之前,您需要确保只能在
20XX
(其中X是任意数字)中有日期,而不能在
19XX
或其他中有日期。

一个选项是导出到csv。然后进行更改并再次导入

    df.to_csv('path/csvfile.csv')

    text = open("path/csvfile.csv", "r")
    text = ''.join([i for i in text]) \
        .replace("0019-", "2019-")
    x = open("path/newcsv.csv","w")
    x.writelines(text)
    x.close()

    df_new = pd.read_csv("path/newcsv.csv")


我在df[“A”]=df[“A”]上遇到了一个错误。apply(lambda x:r.sub('20',x))。TypeError:应该是字符串或类似字节的对象。我想这是因为列“A”是开始的日期时间?在使用
df[“A”]=df[“A”]应用
sub
之前尝试将其转换为字符串。astype(str)