我有一个日期时间列,如下所示-
>>> 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
对象而不是列,
- 使用
pd.DateOffset(years=n)
并不理想,因为它会产生:
用户警告:转换时丢弃非零纳秒
pd.Timedelta()
不接受年份
在这种情况下,唯一对我有效的方法是pd.Timestamp.replace
:
t = pd.Timestamp.now()
t = t.replace(year=t.year - n)
帕德里亚克在回答中暗示了这一点,但需要进一步澄清。