Skip to main content
 首页 » 编程设计

python之替换 pandas.datetime 列中的年份

2025年05月04日22lidabo

我有一个带有使用 pd.to_datetime() 转换的日期列的数据框。当我检查数据时,我发现很少有这些日期提到的年份是 2216,应该是 2016。你能帮我把这些日期的年份从 2216 改成 2016

     Date 
0   2216-12-21 
1   2216-12-23 
2   2216-01-31 
3   2016-12-23 
4   2216-12-27 
5   2216-12-25 
6   2016-12-23 

我尝试使用 str.replace

 df['Date'] = df['Date'].str.replace("2216","2016") 

但出现如下错误

 Can only use .str accessor with string values, which use np.object_ dtype in pandas 

提前致谢

请您参考如下方法:

使用:

df['Date'] = df['Date'].mask(df['Date'].dt.year == 2216,  
                             df['Date'] + pd.offsets.DateOffset(year=2016)) 
print (df) 
        Date 
0 2016-12-21 
1 2016-12-23 
2 2016-01-31 
3 2016-12-23 
4 2016-12-27 
5 2016-12-25 
6 2016-12-23 

为了更好的表现:

df['Date'] = df['Date'].mask(df['Date'].dt.year == 2216, df['Date'] -  
                                                         pd.to_timedelta(200, unit='y') +  
                                                         pd.to_timedelta(12, unit='h')) 
print (df) 
        Date 
0 2016-12-21 
1 2016-12-23 
2 2016-01-31 
3 2016-12-23 
4 2016-12-27 
5 2016-12-25 
6 2016-12-23