熊猫to_datetime解析奇数格式的日期

时间:2020-05-01 11:25:22

标签: python-3.x pandas datetime python-datetime string-to-datetime

TL; DR:

如何使用pd.to_datetime()中的format参数解析格式为“ 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)的事情,并且通常会像魅力一样工作。如果那不起作用,那么我将使用format参数来像这样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 ]

但是这些选项似乎都不是很Python化的

问题:

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

1 个答案:

答案 0 :(得分:2)

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组