首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于更正损坏日期值的脚本。

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

Stack Overflow用户
提问于 2020-04-12 19:34:03
回答 2查看 248关注 0票数 0

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

代码语言:javascript
复制
df['A'].loc[df.A.dt.year<100]=df.A.dt.year+2000

基本上,我希望告诉python检测不到100年的任何年份,然后将2000添加到年份中。但是,我得到了错误:“超出界限纳秒时间戳: 19-11-19 00:00:00”我的问题有什么解决办法吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-12 19:58:24

这是由于时间戳的局限性:请参阅这个关于超限纳秒时间戳的post

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

代码语言:javascript
复制
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

这是结果

代码语言:javascript
复制
          A
0 2019-10-04
1 2019-04-02
2 2018-06-08
3 2018-07-08

在应用这一点之前,您需要确保只能在20XX中有日期(其中X是任何数字),而不能在19XX或其他地方使用日期。

票数 1
EN

Stack Overflow用户

发布于 2020-04-12 20:47:28

一种选择是向csv出口。然后进行更改并再次导入。

代码语言:javascript
复制
    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")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61177042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档