如何为datetime64[ns]格式日期增加6个自然月?解决代码报错
嘿,我来帮你搞定这个日期运算的问题!
首先说清楚你报错的根源:你对effective_date列用apply()的时候,传入lambda的x已经是单个的Timestamp时间戳对象了,不是DataFrame的整行数据,所以你用x['effective_date']这种字典下标访问的方式肯定会报错——Timestamp根本不是可下标访问的类型呀!
另外提一句,你第一行pd.to_datetime(data['effective_date'].values)完全是多余的,因为你自己都说明这个列已经是datetime64[ns]类型了,没必要再转一次。
接下来给你两种解决方案,第二种更推荐:
方案1:修正apply的lambda逻辑
只需要把lambda里的x['effective_date']改成x就行,直接对时间戳对象做加法:
from dateutil.relativedelta import relativedelta # 删掉那行多余的类型转换代码 data['six_mth_interval'] = data['effective_date'].apply(lambda x: x + relativedelta(months=6))
方案2:更高效的向量式操作(强烈推荐)
pandas的datetime列天生支持向量运算,完全不用逐行循环的apply(数据量大的时候apply会很慢),直接对整列做加法就行:
from dateutil.relativedelta import relativedelta data['six_mth_interval'] = data['effective_date'] + relativedelta(months=6)
如果不想导入dateutil库,也可以用pandas自带的DateOffset:
data['six_mth_interval'] = data['effective_date'] + pd.DateOffset(months=6)
这样就能顺利算出每个日期加6个月后的结果啦!
内容的提问来源于stack exchange,提问作者SQLGIT_GeekInTraining
相关产品推荐
相关产品推荐

