基于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
相关产品推荐
相关产品推荐

