You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas的dt访问器转换时间戳为日期时出现错误

问题分析与解决

错误原因

你的代码触发该错误的核心逻辑:

  • 初始的date_clmn列用了Python标准库的datetime.date对象,导致列的 dtype 是object,而非pandas原生的datetime64[ns]类型。
  • 执行my_df.date_clmn - pd.DateOffset(months = 3)后,每个元素确实变成了Timestamp对象,但因为原列是object dtype,新生成的lag_date列仍保持object类型——pandas不会自动把装着Timestamp的object列转换为原生datetime类型。
  • pandas的dt访问器只能作用于**dtype为datetime64[ns](或其他pandas原生时间类型)**的列,无法识别object列里的单个Timestamp对象,因此抛出AttributeError。

解决方法

两种简单修复方式:

方法一:提前转换初始日期列为pandas原生时间类型

在创建DataFrame后,先把date_clmn转为datetime64类型,再计算滞后日期:

import pandas as pd
import datetime
my_df = pd.DataFrame({'date_clmn': [datetime.date(2020, 1, 1),
                                    datetime.date(2020, 2, 1),
                                    datetime.date(2020, 3, 1)]})
# 转换为pandas原生时间类型
my_df['date_clmn'] = pd.to_datetime(my_df['date_clmn'])
my_df['lag_date'] = my_df.date_clmn - pd.DateOffset(months = 3)
# 此时可正常使用dt访问器
my_df.lag_date.dt.date

方法二:直接转换lag_date列为datetime类型

如果已经生成了lag_date列,直接对其进行类型转换即可:

# 转换lag_date列为datetime64类型
my_df['lag_date'] = pd.to_datetime(my_df['lag_date'])
# 现在可以正常调用dt访问器
my_df.lag_date.dt.date

转换后,lag_date列的dtype会变为datetime64[ns],dt访问器就能正常工作。

内容的提问来源于stack exchange,提问作者user1700890

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 00:26:08