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

如何用Python修改日期列年份(不改动月日)?修复DataFrame日期错误

修复DataFrame日期列的年份错误(2019→2017)

搞定这个日期修复问题很简单,而且完全可以自动化处理,尤其适合大型数据集的子集操作。我给你一步步拆解:

1. 先确保日期列是datetime类型

处理日期的前提是让列变成datetime格式——如果你的'Date Posted'目前是字符串,先转成datetime,这样才能直接操作年份:

import pandas as pd

# 转换为datetime类型,errors='coerce'会把无效日期转成NaT(方便后续排查)
df['Date Posted'] = pd.to_datetime(df['Date Posted'], errors='coerce')

2. 自动化修复2019→2017的年份错误

这里有两种高效方法,分别适合不同场景:

方法一:精准替换指定年份(灵活通用)

如果你需要把所有2019年的日期精准改成2017年,月日完全不变,用这个方法逻辑最清晰,适合任何年份替换需求:

# 筛选出年份为2019的行
mask = df['Date Posted'].dt.year == 2019
# 对筛选出的日期,替换年份为2017(月日、时分秒都保持原样)
df.loc[mask, 'Date Posted'] = df.loc[mask, 'Date Posted'].apply(lambda x: x.replace(year=2017))

这个方法的好处是:哪怕以后遇到其他年份错误(比如2020→2018),只需要修改mask里的年份和replace的目标年份就行,非常灵活。

方法二:矢量化调整年份(大数据友好)

如果你的数据集特别大,追求极致速度,用这个矢量化操作的方法,比apply快很多:

mask = df['Date Posted'].dt.year == 2019
# 给筛选出的日期减去2年(2019-2=2017),月日自动保留
df.loc[mask, 'Date Posted'] = df.loc[mask, 'Date Posted'] - pd.DateOffset(years=2)

注意:这个方法只适用于年份是固定差值的情况(比如减2年、加3年),如果是跨不同差值的年份替换,还是用方法一更合适。

3. 验证修复结果

改完之后一定要确认一下,避免漏改或者误改:

# 查看所有年份的分布,确认2019的数量为0
print(df['Date Posted'].dt.year.value_counts())

# 检查是否还有遗漏的2019年日期(正常应该输出空DataFrame)
print(df[df['Date Posted'].dt.year == 2019])

通用修改日期年份的技巧

如果以后需要修改所有日期的年份(不管原来年份是多少),可以直接用:

# 把所有日期的年份改成2020,月日不变
df['Date Posted'] = df['Date Posted'].apply(lambda x: x.replace(year=2020))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:49:25