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

如何使用Pandas将年数字段值添加到日期列生成新日期列

解决方案

错误原因说明

  • pd.to_timedelta不支持精准的年单位计算,受每年天数不固定影响,官方已弃用年/月单位的timedelta参数
  • pd.offsets.DateOffset仅支持传入标量参数,直接传入Number_Years整列Series会运行失败
  • 按365天累加的方案会受闰年影响出现日期偏移,不符合仅修改年份的需求

可行方案

方案1:逐行处理(兼容闰年特殊日期,数据量不大时优先)

首先确保Date列为datetime类型,再逐行调用DateOffset计算:

import pandas as pd

# 先转换Date列为标准 datetime 格式
df1['Date'] = pd.to_datetime(df1['Date'])
# 逐行计算新日期
df1['New Date'] = df1.apply(
    lambda row: row['Date'] + pd.offsets.DateOffset(years=row['Number_Years']),
    axis=1
)

优势:遇到2月29日这类特殊日期时,会自动兼容非闰年场景,返回对应年份的2月28日,不会报错。

方案2:直接修改年份属性(需求严格对齐月日、无2月29日数据时使用)

直接替换datetime对象的year属性:

df1['Date'] = pd.to_datetime(df1['Date'])
df1['New Date'] = df1.apply(
    lambda row: row['Date'].replace(year=row['Date'].year + row['Number_Years']),
    axis=1
)

注意:如果原始数据存在2月29日的日期,加年后对应年份不是闰年时会报错。

方案3:向量化计算(数据量较大时优先,性能远高于逐行apply)

直接提取日期的年、月、日属性,拼接为新日期:

df1['Date'] = pd.to_datetime(df1['Date'])
df1['New Date'] = pd.to_datetime(
    {
        'year': df1['Date'].dt.year + df1['Number_Years'],
        'month': df1['Date'].dt.month,
        'day': df1['Date'].dt.day
    },
    errors='coerce' # 遇到非法日期(如非闰年2月29日)时返回NaT,可根据需求调整参数
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:18:03