with example create python python-2.7 datetime pandas

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