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

如何在Pandas中为DataFrame日期列精确添加一年?

精确给Pandas日期列添加一年的方法

这个问题我之前也碰到过!用pd.to_timedelta加年份确实会踩坑——它本质是按固定时长计算的,而一年的天数并不固定(平年365天、闰年366天),而且底层转换还会带来奇怪的时分秒偏差。下面给你两个靠谱的、能精确添加日历年份的方法:

方法1:使用Pandas内置的DateOffset

这是最推荐的方式,Pandas专门提供了DateOffset类来处理日历层面的时间偏移,会自动处理闰年等特殊情况,而且不会产生额外的时分秒。

示例代码:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({'original_date': ['2023-01-01', '2020-02-29', '2024-03-15']})
# 先将字符串列转为datetime类型
df['original_date'] = pd.to_datetime(df['original_date'])
# 添加一年
df['date_plus_1_year'] = df['original_date'] + pd.DateOffset(years=1)

print(df)

输出结果会是完全精确的日期,没有多余的时分秒,而且像2020-02-29(闰年)加一年后会自动转为2021-02-28,完全符合日历规则。

方法2:使用dateutil.relativedelta

如果你需要更灵活的时间偏移(比如同时加年、月、日),可以用dateutil库的relativedelta,同样能精确处理日历年份。

示例代码:

import pandas as pd
from dateutil.relativedelta import relativedelta

df = pd.DataFrame({'original_date': ['2023-01-01', '2020-02-29']})
df['original_date'] = pd.to_datetime(df['original_date'])
# 用apply添加一年
df['date_plus_1_year'] = df['original_date'].apply(lambda x: x + relativedelta(years=1))

为什么pd.to_timedelta不行?

简单说,pd.to_timedelta(1, unit='Y')是把“一年”转换成固定的秒数(基于回归年的平均时长,约365.2425天),所以计算出来的时间会带有小数部分,最终表现为额外的时分秒。而且它不会考虑日历中的闰年、月份天数差异,完全是物理时长的累加,不符合我们日常“加一年”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:12:22