固定日期和日期在某些行中互换的日期字符串

时间:2018-12-10 11:47:38

标签: python pandas datetime

我正在尝试从csv文件中上传一些数据,并发现日期和月份的值可以互换。

下面是数据的外观:

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

所有日期都是从9月开始,但是可以看到它们以不同的格式互换。我正在使用以下内容转换为日期时间

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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