Pandas to_datetime 解析格式奇怪的日期
Pandas to_datetime parsing for oddly formatted date
TL;DR:
如何使用 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 ]
但是 none 这些选项看起来非常 pythonic
问题:
如何使用 pd.to_datetime() 中的格式参数来解析格式为 'YYYY mmdd dd' 的日期?
使用str.rsplit
with n=1
and selecting first list and then pass to 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)
error: redefinition of group name 'd' as group 4; was group 3
TL;DR:
如何使用 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 ]
但是 none 这些选项看起来非常 pythonic
问题:
如何使用 pd.to_datetime() 中的格式参数来解析格式为 'YYYY mmdd dd' 的日期?
使用str.rsplit
with n=1
and selecting first list and then pass to 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)
error: redefinition of group name 'd' as group 4; was group 3