替换pandas.datetime列中的年份

时间:2018-06-04 05:42:41

标签: python pandas

我有一个数据框,其日期列使用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

提前致谢

1 个答案:

答案 0 :(得分:5)

使用:

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