Quiero restar las fechas en 'A' de las fechas en 'B' y agregar una nueva columna con la diferencia.
df
A B
one 2014-01-01 2014-02-28
two 2014-02-03 2014-03-01
He intentado lo siguiente, pero aparece un error cuando intento incluir esto en un bucle for ...
import datetime
date1=df['A'][0]
date2=df['B'][0]
mdate1 = datetime.datetime.strptime(date1, "%Y-%m-%d").date()
rdate1 = datetime.datetime.strptime(date2, "%Y-%m-%d").date()
delta = (mdate1 - rdate1).days
print delta
¿Qué tengo que hacer?
python
pandas
date-difference
Jase Villam
fuente
fuente
pd.offsets.Day(1)
(con una 's'). Normalmente también lo niego, así que obtienes(df['A'] - df['B']) / pd.offsets.Day(-1)
(df['A'] - df['B']) / np.timedelta64(-1, 'D')
por razones que no entiendo completamente..dt.days
atributo que debería ser muy preferido.Para eliminar el elemento de texto 'días', también puede utilizar el acceso dt () para la serie: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.html
Entonces,
df[['A','B']] = df[['A','B']].apply(pd.to_datetime) #if conversion required df['C'] = (df['B'] - df['A']).dt.days
que devuelve:
A B C one 2014-01-01 2014-02-28 58 two 2014-02-03 2014-03-01 26
fuente
df['C'] = (df['B'] - df['A']).dt.days
no funcionó y tuve que usardf['C'] = (df['B'] - df['A']).days
. ¿Alguna idea de por qué el mío no dio la cantidad de días que esperaba?datetime64[ns]
para ser precisos). Cuando lo hicedf['C'] = (df['B'] - df['A']).dt.days
, recibí un error de atributo que decía AttributeError: El objeto 'Timedelta' no tiene atributo 'dt' , así que probé df ['C'] = (df ['B'] - df ['A']). días que me dieron la respuesta deseada. (Por supuesto que estoy usando mi propio marco de datos, no el del ejemplo anterior. O podría ser porque también tengo tiempo en mi fecha y no como en2018-09-24 10:17:18.800277
)Una lista de comprensión es su mejor opción para la forma más Pythonic (y más rápida) de hacer esto:
[int(i.days) for i in (df.B - df.A)]
Si sus columnas no están en formato de fecha y hora. La sintaxis más corta sería:
df.A = pd.to_datetime(df.A)
fuente
Qué tal esto:
times['days_since'] = max(list(df.index.values)) times['days_since'] = times['days_since'] - times['months'] times
fuente