如何将DataFrame中yyyy-MM-dd'T'HH:mm:ssZ格式转为datetime并解决报错
报错原因
你的转换代码有三处核心错误,导致格式匹配失败:
- 格式符不符合Python语法规范:
pd.to_datetime()遵循Python原生strptime格式规则,你用的yyyy(4位年)、HH(24小时制小时)是其他语言的写法,Python中对应要写%Y、%H。 - 格式字符串存在多余字符:你写的
HH :mm在小时和冒号之间多打了一个空格,和实际数据里HH:mm紧挨着的结构不匹配。 - 毫秒标识写错:你写的
SSS同样不是Python合法格式符,毫秒/微秒部分要写%f。
正确实现方案
根据你转换后设置为索引的需求,有两种常用写法:
方案1:手动指定格式(解析速度最快,适合格式完全统一的数据集)
写对匹配数据的格式串即可,转换后是无时区的datetime64类型,可直接设为索引:
df['created_at_tweet'] = pd.to_datetime( df['created_at_tweet'], format="%Y-%m-%dT%H:%M:%S.%fZ" ) # 设置为索引 df = df.set_index('created_at_tweet')
方案2:自动解析ISO格式(容错性高,适合可能存在格式微小差异的数据集)
你手里的时间是标准ISO8601 UTC格式,不需要手动写格式串,加utc=True参数即可自动解析,解析后是带UTC时区标记的datetime类型,后续做时区转换更方便:
df['created_at_tweet'] = pd.to_datetime(df['created_at_tweet'], utc=True) # 设置为索引 df = df.set_index('created_at_tweet')
注意:如果你的pandas版本在2.0以上,即使不传
format参数,默认解析ISO格式的速度也和手动指定格式差不多,优先选方案2更省心。
内容的提问来源于stack exchange,提问作者Lilsss
相关产品推荐
相关产品推荐

