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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 09:36:06  来源:igfitidea点击:

Subtract an year from a datetime column in pandas

pythonpython-2.7datetimepandas

提问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 DateOffsetto 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 applyis 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