我有一个如下所示的数据框:
Date_1 Date_2
0 5 Dec 2017 5 Dec 2017
1 14 Dec 2017 14 Dec 2017
2 15 Dec 2017 15 Dec 2017
3 18 Dec 2017 21 Dec 2017 18 Dec 2017 21 Dec 2017
4 22 Dec 2017 22 Dec 2017
要检查的条件:
- 想要检查是否有任何一行包含两个日期或不像第 3 行。如果存在,将它们分成两行。
- 在两列上应用日期时间。
我正在尝试执行如下相同的操作:
df['Date_1'] = pd.to_datetime(df['Date_1'], format='%d %b %Y')
但出现以下错误:
ValueError: unconverted data remains:
预期输出:
Date_1 Date_2
0 5 Dec 2017 5 Dec 2017
1 14 Dec 2017 14 Dec 2017
2 15 Dec 2017 15 Dec 2017
3 18 Dec 2017 18 Dec 2017
4 21 Dec 2017 21 Dec 2017
5 22 Dec 2017 22 Dec 2017
最佳答案
在 findall
使用正则表达式得到你的日期后,你的问题变成了 unnesting
问题
s=df.apply(lambda x : x.str.findall(r'((?:\d{,2}\s)?(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*(?:-|\.|\s|,)\s?\d{,2}[a-z]*(?:-|,|\s)?\s?\d{,4})'))
unnesting(s,['Date_1','Date_2']).apply(pd.to_datetime)
Out[82]:
Date_1 Date_2
0 2017-12-05 2017-12-05
1 2017-12-14 2017-12-14
2 2017-12-15 2017-12-15
3 2017-12-18 2017-12-18
3 2017-12-21 2017-12-21
4 2017-12-22 2017-12-22
关于python - 如何将一行拆分为多行并在数据框列上应用日期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54331914/