首页 > 解决方案 > Pandas to_datetime 解析奇怪格式的日期

问题描述

TL;博士:

如何使用 pd.to_datetime() 中的格式参数来解析格式为“YYYY mmdd dd”的日期?

背景:

我从 api 中提取一些数据,索引是一个日期,但被格式化为一个字符串。这是索引的样子:

Index(['2020 0422 22', '2020 0423 23', '2020 0424 24', '2020 0427 27',
       '2020 0428 28'],
      dtype='object')

选项1:

通常我会做类似的事情df.index = pd.to_datetime(df.index),这通常会像一个魅力。如果这不起作用,那么我将使用格式参数进行解析,pd.to_datetime(format='%y/%m/%d)但是鉴于一天包含两次,我不确定如何使用此参数。

选项 2:

我还可以使用字符串推导来创建一个新列表,将其转换为日期时间,然后将 df 的索引设置为等于该列表。像这样的东西:

[ x.split(' ')[0] + x.split(' ')[1] for x in df.tail().index ]

或者

[ x[0:-2] for x in df.tail().index ]

但是这些选项似乎都不是很pythonic

问题:

如何使用 pd.to_datetime() 中的格式参数来解析格式为“YYYY mmdd dd”的日期?

标签: python-3.xpandasdatetimepython-datetimestring-to-datetime

解决方案


使用str.rsplitn=1选择第一个列表,然后传递给to_datetime

idx = pd.Index(['2020 0422 22', '2020 0423 23', '2020 0424 24', '2020 0427 27',
       '2020 0428 28'])
df = pd.DataFrame(index = idx)

df.index = pd.to_datetime(df.index.str.rsplit(n=1).str[0], format='%Y %m%d')
print (df)

Empty DataFrame
Columns: []
Index: [2020-04-22 00:00:00, 2020-04-23 00:00:00, 
        2020-04-24 00:00:00, 2020-04-27 00:00:00, 
        2020-04-28 00:00:00]

顺便说一句,最直观的答案失败了:

df.index = pd.to_datetime(df.index, format='%Y %m%d %d')
print (df)

错误:将组名“d”重新定义为组 4;是第 3 组


推荐阅读