Python 用于更正损坏日期值的脚本
我的dataframe包含许多不正确的日期时间值,这些值被输入这些数据的人大量输入。错误主要是2019-11-12输入为0019-12-12,2018输入为0018。它们太多了,所以我想拿出一个脚本来大规模地纠正它们。我使用了以下代码: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列之前将其
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)
。