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

我试图从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')

回答(2)

2 years ago

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 years ago

我已经找到一个巧妙的小技巧,使用 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