example - string to datetime python
Resta un año de una columna de fecha y hora en pandas (3)
Tengo una columna de fecha y hora como la siguiente:
>>> df[''ACC_DATE''].head(2)
538 2006-04-07
550 2006-04-12
Name: ACC_DATE, dtype: datetime64[ns]
Ahora, quiero restar un año de cada fila de esta columna. ¿Cómo puedo lograr lo mismo y qué biblioteca puedo usar?
El campo esperado -
ACC_DATE NEW_DATE
538 2006-04-07 2005-04-07
549 2006-04-12 2005-04-12
Gracias.
Podrías usar pd.Timedelta:
df["NEW_DATE"] = df["ACC_DATE"] - pd.Timedelta(days=365)
O reemplazar:
df["NEW_DATE"] = df["ACC_DATE"].apply(lambda x: x.replace(year=x.year - 1))
Pero ninguno de los dos capturará años bisiestos, por lo que podría usar dateutil.relativedelta
:
from dateutil.relativedelta import relativedelta
df["NEW_DATE"] = df["ACC_DATE"].apply(lambda x: x - relativedelta(years=1))
Puedes usar DateOffset
para lograr esto:
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
actualizar
Mirar esta pregunta 3 años después, usar la apply
es necesario, simplemente puede hacer:
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
que es una operación vectorizada
Utilice 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