我正在尝试从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')
答案 0 :(得分:2)
我想出了一个巧妙的小技巧,可以使用str.extract
和pd.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