UTC格式字符串转datetime失败,求正确的Pandas实现方法
问题排查与解决方法
问题原因
你的格式字符串%Y-%m-%dT%H:%M:%S.%Z存在错误:%Z用于匹配时区名称(如UTC),但你的时间字符串结构是.000Z——其中.000是毫秒部分,Z是UTC的标记,%Z无法匹配这个结构,导致解析失败。
可行转换方案
方案1:指定正确的格式字符串
将格式改为%Y-%m-%dT%H:%M:%S.%fZ,其中%f用来匹配微秒/毫秒部分(pandas会自动兼容三位毫秒的情况),末尾的Z直接作为固定字符匹配:
import pandas as pd data = [ ["2023-09-13T19:17:21.000Z"], ["2023-09-13T19:18:22.000Z"], ["2023-09-13T19:19:23.000Z"], ] df = pd.DataFrame(data,columns=['ts']) df['ts'] = pd.to_datetime(df['ts'], format='%Y-%m-%dT%H:%M:%S.%fZ') print(df)
如果需要保留UTC时区信息,可额外添加utc=True参数:
df['ts'] = pd.to_datetime(df['ts'], format='%Y-%m-%dT%H:%M:%S.%fZ', utc=True)
方案2:让pandas自动解析ISO格式
pandas的pd.to_datetime对ISO 8601格式的时间字符串有原生支持,你可以直接省略format参数,让它自动识别解析:
import pandas as pd data = [ ["2023-09-13T19:17:21.000Z"], ["2023-09-13T19:18:22.000Z"], ["2023-09-13T19:19:23.000Z"], ] df = pd.DataFrame(data,columns=['ts']) df['ts'] = pd.to_datetime(df['ts'], utc=True) print(df)
这种方法更简洁,且能正确识别Z标记的UTC时区,返回带时区信息的datetime对象。
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

