我的数据包含了许多不正确的日期时间值,这些值被输入这些数据的人大量输入。错误大多是2019-11-12年输入的0019-12-12,2018年输入的是0018。有这么多,所以我想拿出一个脚本来纠正他们。我使用了以下代码:
df['A'].loc[df.A.dt.year<100]=df.A.dt.year+2000基本上,我希望告诉python检测不到100年的任何年份,然后将2000添加到年份中。但是,我得到了错误:“超出界限纳秒时间戳: 19-11-19 00:00:00”我的问题有什么解决办法吗?谢谢
发布于 2020-04-12 19:58:24
这是由于时间戳的局限性:请参阅这个关于超限纳秒时间戳的post。
因此,我建议在将该列转换为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或其他地方使用日期。
发布于 2020-04-12 20:47:28
一种选择是向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")https://stackoverflow.com/questions/61177042
复制相似问题