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

基于pd.DataFrame相对时间列构建expiry日期列报错求助

解决DataFrame添加'expiry'列时的AttributeError问题

嘿,这个坑我之前也踩过!咱们先拆解下你出错的原因:

你写的df.apply(lambda x: datetime.utcnow() + timedelta(x.t * 365))默认是按列执行的(axis=0是apply的默认参数),这时候lambda里的x代表的是DataFrame的每一列(比如先处理atmVol列),而atmVol这个Series根本没有t属性,自然就抛出AttributeError了。

两种正确的解决方法

方法1:指定axis=1让apply按行处理

只需要给apply加上axis=1参数,让它逐行遍历,这时候x就代表每一行的Series,就能正常访问x.t了。另外注意补全括号,并且给timedelta指定days参数(不然默认会把数值当成秒,结果会完全不符合预期):

from datetime import datetime, timedelta
# 关键是加上axis=1参数,让apply逐行处理
df['expiry'] = df.apply(lambda x: datetime.utcnow() + timedelta(days=x.t * 365), axis=1)

方法2:用向量化运算替代apply(更高效)

apply本质是逐行循环,数据量大的时候效率很低。推荐用pandas的向量化方法来处理,速度快很多:

import pandas as pd
from datetime import datetime

df['expiry'] = datetime.utcnow() + pd.to_timedelta(df['t'] * 365, unit='days')

这个方法直接对整个t列做批量运算,不需要逐行处理,性能更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:07:58