web-dev-qa-db-ja.com

pandasの日時列から年を引く

私は以下のような日時列を持っています-

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

ここで、この列の各行から1年を減算します。どうすれば同じことを実現できますか?また、どのライブラリを使用できますか?

期待されるフィールド-

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

ありがとう。

24
0nir

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

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

これはベクトル化された操作です

53
EdChum

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))
10

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
10
jezrael