Python 从熊猫的日期时间列中减去一年
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/31169774/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Subtract an year from a datetime column in pandas
提问by 0nir
I have a datetime column as below -
我有一个日期时间列如下 -
>>> df['ACC_DATE'].head(2)
538 2006-04-07
550 2006-04-12
Name: ACC_DATE, dtype: datetime64[ns]
Now, I want to subtract an year from each row of this column. How can I achieve the same & which library can I use?
现在,我想从该列的每一行中减去一年。我怎样才能实现相同的以及我可以使用哪个库?
The expected field -
预期字段 -
ACC_DATE NEW_DATE
538 2006-04-07 2005-04-07
549 2006-04-12 2005-04-12
Thanks.
谢谢。
采纳答案by EdChum
You can use DateOffset
to achieve this:
您可以使用以下方法DateOffset
来实现:
In [15]:
df['NEW_DATE'] = df['ACC_DATE'].apply(lambda x: x - pd.DateOffset(years=1))
df
Out[15]:
ACC_DATE NEW_DATE
index
538 2006-04-07 2005-04-07
550 2006-04-12 2005-04-12
update
更新
Looking at this question 3 years later using apply
is unnecessary you can just do:
使用 3 年后看这个问题apply
是不必要的,你可以这样做:
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
which is a vectorised operation
这是一个矢量化操作
回答by Padraic Cunningham
You could use pd.Timedelta:
你可以使用 pd.Timedelta:
df["NEW_DATE"] = df["ACC_DATE"] - pd.Timedelta(days=365)
Or replace:
或者替换:
df["NEW_DATE"] = df["ACC_DATE"].apply(lambda x: x.replace(year=x.year - 1))
But neither will catch leap years so you could use dateutil.relativedelta
:
但两者都不会赶上闰年,所以你可以使用dateutil.relativedelta
:
from dateutil.relativedelta import relativedelta
df["NEW_DATE"] = df["ACC_DATE"].apply(lambda x: x - relativedelta(years=1))
回答by jezrael
Use DateOffset:
使用日期偏移:
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