python - 如何将一行拆分为多行并在数据框列上应用日期时间?

标签 python pandas datetime

我有一个如下所示的数据框:

                   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

要检查的条件:

  1. 想要检查是否有任何一行包含两个日期或不像第 3 行。如果存在,将它们分成两行。
  2. 在两列上应用日期时间。

我正在尝试执行如下相同的操作:

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/

相关文章:

python - 计算用户的帖子数量 - django

java - 客户端日期时间与服务器日期时间不匹配

python - 使用 pandas 对 Excel 列进行排序

python - 使用 Pandas 创建带 Series 的 DataFrame,导致内存错误

datetime - Hive 时间戳 ISO 到 UTC 的转换

Java:将时区添加到 DateTimeFormatter

python - 如何替换 for 循环中的 if 语句(为了更好看的代码)

python - 替换列表中每个项目中的未知第一个字符时键入错误

python - 如何在 Pyramid 中使用pyramid_celery?

python - Pandas:取回存储在 DataFrame 中的原始 numpy 数组