Pandas中带时区的ISO格式日期时间如何转换为指定时间格式?
问题根因
你使用的format参数和原始时间格式不匹配:原始的ISO时间字符串包含T分隔符、毫秒段、末尾时区标识Z,你指定的%Y-%m-%d %H:%M:%S格式无法正确匹配,导致解析异常出现时分秒丢失,或触发pandas默认显示规则隐藏了时分秒部分(实际数据仍存在,可通过df['date'].dt.hour验证)。
最有效的转换方案
pandas原生支持ISO 8601格式的自动识别,无需手动编写复杂格式串,两步即可完成转换:
- 首先正确解析为datetime类型
# utc=True表示自动识别末尾的Z标识为UTC时区,不需要时区信息可加.dt.tz_localize(None)移除 df['date'] = pd.to_datetime(df['date'], utc=True).dt.tz_localize(None)
- 再格式化为目标字符串格式
df['date_formatted'] = df['date'].dt.strftime('%Y-%m-%d %H:%M:%S')
大表性能优化方案
如果你的DataFrame数据量超过10万行,可手动指定正确格式串提升解析速度:
# 完全匹配原始ISO格式的format参数 df['date'] = pd.to_datetime(df['date'], format="%Y-%m-%dT%H:%M:%S.%fZ").dt.tz_localize(None) df['date_formatted'] = df['date'].dt.strftime('%Y-%m-%d %H:%M:%S')
内容的提问来源于stack exchange,提问作者maxokream
相关产品推荐
相关产品推荐

