修复日期和字符串在某些行中互换的日期和字符串

loading...


2

我试图从csv文件上传一些数据,并找到日期和月份的值互换 .

下面给出了数据的外观:

id,date
1001,09/10/2018
1002,20/09/2018
1003,09/05/2018

所有的日期都是从九月开始,但是看到它们以不同的格式互换 . 我使用以下转换为datetime

df['date'] = pd.to_datetime(df['date']).dt.strftime('%d/%m/%Y')

loading...

2回答

  • 1

    Pandas没有处理你的样本数据的问题,因为它明显出现在US notation,除了 '20/09/2018' ,其中 20 不可能是一个月大熊猫没有问题处理 .

    但是,如果输入包含例如 '10/09/2018' (正如评论中所提到的),除非假定美国符号或事先知道绝对所有日期都是9月,否则不可能分辨日和月 .

    由于后者似乎是这种情况,你可以这样做

    df['date'].map(lambda x: pd.datetime(x.year, x.day, x.month)
                   if (x.month != 9) & (x.day == 9)
                   else x)
    
    0   2018-09-10
    1   2018-09-20
    2   2018-09-05
    

  • 2

    我已经找到一个巧妙的小技巧,使用 str.extractpd.to_datetime 来快速有效地完成这项工作:

    m = df.date.str.extract(r'(?:(09)/(\d+))')[1].astype(int) > 31
    df['date'] = [
        pd.to_datetime(d, dayfirst=m) for d, m in zip(df.date, m)]
    
         id       date
    0  1001 2018-09-10
    1  1002 2018-09-20
    2  1003 2018-09-05
    
评论

暂时没有评论!