Pandas处理时间列调用.dt访问器报AttributeError错误求助
问题原因
- 你使用的timestamp列包含混合时区的时间值(部分为UTC+0时区,部分为UTC-4时区),适配Python3.6的低版本Pandas处理这类混合时区的时间数据时,调用
pd.to_datetime()后无法生成统一的datetime64[ns, tz]类型Series,会退化为object类型,仅将每个元素单独存储为Python原生datetime对象 - Pandas的
.dt访问器仅支持原生datetime64类型的Series,不支持元素为datetime对象的object类型列,因此触发报错。你做的类型校验仅能证明列内元素都是Python原生datetime对象,不能证明Series是Pandas原生的datetime64类型,二者为不同概念。
解决方案
方案1:统一转换为UTC时间后再转目标时区(推荐)
调用pd.to_datetime()时指定utc=True参数,自动将所有不同时区的时间统一为UTC时区,输出标准的datetime64[ns, UTC]类型Series,即可正常使用.dt访问器:
import pandas as pd # 替换为你实际使用的目标时区名,例如'Asia/Shanghai' timezone_for_plot = "your_target_timezone" df = pd.read_csv("my_csv_content_below.csv") df["timestamp"] = pd.to_datetime(df["timestamp"], utc=True) df["timestamp"] = df["timestamp"].dt.tz_convert(timezone_for_plot)
方案2:显式指定格式解析后统一时区
如果需要对时间格式做严格校验,可以指定format参数解析后再统一时区:
df["timestamp"] = pd.to_datetime(df["timestamp"], format="%Y-%m-%d %H:%M:%S%z", utc=True) df["timestamp"] = df["timestamp"].dt.tz_convert(timezone_for_plot)
转换完成后可执行print(df["timestamp"].dtype)验证,输出为datetime64[ns, 你的目标时区]即为正常。
内容的提问来源于stack exchange,提问作者user1315621
相关产品推荐
相关产品推荐

