从panda中的日期时间列中减去一年



我有一个日期时间列,如下所示-

>>> df['ACC_DATE'].head(2)
538   2006-04-07
550   2006-04-12
Name: ACC_DATE, dtype: datetime64[ns]

现在,我想从这一列的每一行中减去一年。我怎样才能实现同样的&我可以使用哪个图书馆?

预期字段-

        ACC_DATE    NEW_DATE
538   2006-04-07  2005-04-07
549   2006-04-12  2005-04-12

您可以使用DateOffset来实现这一点:

In[88]:
df['NEW_DATE'] = df['ACC_DATE'] - pd.DateOffset(years=1)
df
Out[88]: 
        ACC_DATE   NEW_DATE
index                      
538   2006-04-07 2005-04-07
550   2006-04-12 2005-04-12

使用日期偏移:

df["NEW_DATE"] = df["ACC_DATE"] - pd.offsets.DateOffset(years=1)
print (df)
        ACC_DATE   NEW_DATE
index                      
538   2006-04-07 2005-04-07
550   2006-04-12 2005-04-12

您可以使用pd.Timedelta:

df["NEW_DATE"] = df["ACC_DATE"] - pd.Timedelta(days=365) 

或替换:

df["NEW_DATE"] = df["ACC_DATE"].apply(lambda x: x.replace(year=x.year - 1))

但两者都不会赶上闰年,所以你可以使用dateutil.relativedelta:

from dateutil.relativedelta import  relativedelta
df["NEW_DATE"] = df["ACC_DATE"].apply(lambda x: x - relativedelta(years=1))

如果有单个pd.Timestamp对象而不是列,

  1. 使用pd.DateOffset(years=n)并不理想,因为它会产生:

用户警告:转换时丢弃非零纳秒

  1. pd.Timedelta()不接受年份

在这种情况下,唯一对我有效的方法是pd.Timestamp.replace

t = pd.Timestamp.now()
t = t.replace(year=t.year - n)

帕德里亚克在回答中暗示了这一点,但需要进一步澄清。

相关内容

  • 没有找到相关文章

最新更新