pandas转换含时区缩写的时间字符串为datetime时格式不匹配如何解决
Pandas解析带PST/PDT后缀时间字符串报错解决方案
报错核心原因
%Z是Python标准库strptime提供的时区缩写解析占位符,它仅能识别当前运行环境的本地时区缩写,对于PST/PDT这类美国太平洋时区的缩写,在非美区环境中默认无法匹配,因此会抛出格式不匹配的报错。
最简处理方案
- 方案1:统一忽略时区后缀后指定规范时区(最推荐)
所有时间都属于美国太平洋时区,PST/PDT只是冬令时/夏令时的不同标识,IANA规范时区America/Los_Angeles会自动处理夏令时转换,不需要单独识别后缀:# 去除末尾的(PDT)/(PST)后缀 dftest_clean = dftest.str.replace(r'\s*\([PDE]T\)$', '', regex=True) # 转换为datetime后指定太平洋时区 dftest_datetime = pd.to_datetime(dftest_clean, format='%Y-%m-%d %H:%M:%S').dt.tz_localize('America/Los_Angeles') - 方案2:让pandas自动解析格式
不指定format参数,pandas会自动调用dateutil解析器,对这类常见时区缩写的识别兼容性更高,适合数据量不大的场景:dftest_datetime = pd.to_datetime(dftest)
注意:不要直接用
PST/PDT作为时区参数传入,这类缩写存在全局歧义(例如PST也可指代菲律宾标准时间),使用IANA规范时区名America/Los_Angeles是兼容性最高的写法。
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

