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

使用Pandas DateTime Apply方法报错:'Timestamp'对象无'dt'属性

解决apply中调用dt.second触发的AttributeError问题

问题根源

你碰到的AttributeError: 'Timestamp' object has no attribute 'dt'其实很好理解:

  • 当你执行data['TS'].dt.second时,data['TS']是一个pandas Series对象,dt是pandas为datetime类型序列专门提供的访问器,用来批量处理序列里的所有datetime元素。
  • 但使用apply()方法时,传入myTimeFun的tsRow是单个的Timestamp对象(也就是Series里的每一行独立元素),单个Timestamp本身就自带second属性,完全不需要通过dt访问器来调用。

修正后的代码

只需要把函数里的tsRow.dt.second改成直接访问tsRow.second即可:

from datetime import timedelta
def myTimeFun(tsRow):
    addSec = 0 # 可替换为你需要的数值
    thisSec = tsRow.second  # 直接调用Timestamp的second属性
    return tsRow + timedelta(seconds=addSec)

data['TS_Apx30Sec'] = data['TS'].apply(myTimeFun)

更高效的替代方案(推荐)

其实完全没必要用apply——pandas支持矢量化操作,效率比逐行遍历的apply高得多,尤其是数据量较大时:

addSec = 0
data['TS_Apx30Sec'] = data['TS'] + timedelta(seconds=addSec)

# 如果需要根据秒数动态计算addSec,也可以用矢量化方式实现,比如:
# data['addSec'] = 30 - data['TS'].dt.second % 30
# data['TS_Apx30Sec'] = data['TS'] + pd.to_timedelta(data['addSec'], unit='s')

这种方式既规避了属性错误,又能充分利用pandas的性能优势。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:32:20