python-3.x - 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”的日期?
解决方案
使用str.rsplit
并n=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 组
推荐阅读
- git - 如果github告诉我“通过在...上推送到主分支来添加更多提交”,我如何向某人发送给我的拉取请求添加提交?
- asterisk - 拨号计划中的星号拨号和应答
- ruby-on-rails - Rails link_to 设置
- c# - 使用 .Split() 将数字 + 数字存储到两个字符串数组中?
- java - 在Android应用程序中存储和访问具有相应键值的字符串
- android - React Native Firebase Cloud Firestore
- css - 如何突出显示离子列表中的选定项目/项目
- python - 将对象转换为浮点数时遇到问题
- android - 如何导入仅包含 Java 和 XML 文件的项目?
- css - VueJs vue-router 链接外部网站