Tengo 2 columnas de fecha (comienzo y fin) en un marco de datos donde las fechas están en el siguiente formato de cadena '% Y-% m-% d% H:% M:% S.% f'. ¿Cómo puedo cambiarlos a formato de fecha en Python? También quiero crear una nueva columna que muestre la diferencia en días entre el final y las fechas de inicio.

¡Gracias de antemano!

1
finstats 28 ago. 2014 a las 03:38

2 respuestas

La mejor respuesta

Si está utilizando una versión reciente de pandas, puede pasar un argumento de formato a to_datetime:

In [11]: dates = ["2014-08-27 19:53:06.000", "2014-08-27 19:53:15.002"]

In [12]: pd.to_datetime(dates, format='%Y-%m-%d %H:%M:%S.%f')
Out[12]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-08-27 19:53:06, 2014-08-27 19:53:15.002000]
Length: 2, Freq: None, Timezone: None

Nota: en este caso no es necesario pasar el formato, pero puede ser más rápido / más estricto:

In [13]: pd.to_datetime(dates,)
Out[13]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-08-27 19:53:06, 2014-08-27 19:53:15.002000]
Length: 2, Freq: None, Timezone: None
4
Andy Hayden 28 ago. 2014 a las 00:14

El módulo datetime tiene todo lo que necesitas para jugar con las fechas. Tenga en cuenta que en el formato que describe %Y-%m-%d %H:%M:%S.%f el %f no aparece en directivas conocidas y no está incluido en mi respuesta

from datetime import datetime
dates = ["2014-08-27 19:53:06", "2014-08-27 19:53:15"]
# That's where the conversion happens from string to datetime objects
datetimes = [datetime.strptime(date, "%Y-%m-%d %H:%M:%S") for date in dates]
print datetimes
>> [datetime.datetime(2014, 8, 27, 19, 53, 6), datetime.datetime(2014, 8, 27, 19, 53, 15)
# Here a simple subtraction will give you the result you are looking for return a timedelta object
delta = datetimes[1] - datetimes[0]
print type(delta), delta
>> <type 'datetime.timedelta'>, 0:00:09
0
bvidal 28 ago. 2014 a las 03:02