我有一个日期时间列如下-
>>> 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
ve7v8dk21#
您可以使用DateOffset来实现这一点:
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
9udxz4iz2#
使用日期偏移:
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
5anewei63#
你可以使用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:
dateutil.relativedelta
from dateutil.relativedelta import relativedelta df["NEW_DATE"] = df["ACC_DATE"].apply(lambda x: x - relativedelta(years=1))
qyyhg6bp4#
如果有单个pd.Timestamp对象而不是列,1.使用pd.DateOffset(years=n)并不理想,因为它会产生:用户警告:在转换中丢弃非零纳秒
pd.Timestamp
pd.DateOffset(years=n)
pd.Timedelta()
pd.Timestamp.replace
t = pd.Timestamp.now() t = t.replace(year=t.year - n)
这在answer by Padriac中有所暗示,但需要进一步澄清。
yvfmudvl5#
您可以使用Timedelta与字符串:
Timedelta
df['col'] - pd.Timedelta('365 days')
或
df['col'] + pd.Timedelta('-365 days')
5条答案
按热度按时间ve7v8dk21#
您可以使用
DateOffset
来实现这一点:9udxz4iz2#
使用日期偏移:
5anewei63#
你可以使用pd.Timedelta:
或替换:
但是它们都不会捕获闰年,所以你可以使用
dateutil.relativedelta
:qyyhg6bp4#
如果有单个
pd.Timestamp
对象而不是列,1.使用
pd.DateOffset(years=n)
并不理想,因为它会产生:用户警告:在转换中丢弃非零纳秒
pd.Timedelta()
不接受年份。在这种情况下,对我来说唯一有效的方法是
pd.Timestamp.replace
:这在answer by Padriac中有所暗示,但需要进一步澄清。
yvfmudvl5#
您可以使用
Timedelta
与字符串:或