Convertir en datetime columna dataframe

publicado por: Anonymous

Buenos días,

Mi script lee un csv con diversas columnas. En la función de pandas read_csvlee:

data = pd.read_csv(filepath, index_col='Target', parse_dates=True, infer_datetime_format=True)

El dataframetiene este aspecto:

Target        Observer          StartTime                 StopTime  
Target1       RT1               2019-09-01 20:47:50.02    2019-09-01 20:57:50.02     

Pero los dtypesque me da son:

Observer        object
StartTime       object
Stoptime        object

Necesito sacar la duración de cada observación, y luego otras operaciones en las que necesito poder tratar las fechas (i.e: ver cuánto tarda en aparecer la siguiente observación o lead(StartTime) - StopTime).

No consigo pasar de ninguna manera StartTime y StopTime a datetime para operar mejor con ellas.

He probado pd.to_datetime()y otras funciones y no dan resultado.

¿Alguna idea?

¡Gracias de antemano!

solución

Para solucionar tu problema basta con que le pases de forma explícita a las columnas que debe parsear mediante el argumento date_parses . El formato es perfectamente asumible por numpy.datetime64:

import pandas as pd

data = pd.read_csv('datos.csv', index_col='Target',
                   parse_dates=['StartTime','StopTime'])

data['Elapsed_time'] = data['StopTime'] - data['StartTime']

print(data.dtypes)
print(data)

El csv de entrada que he usado (inventando datos):

Target,Observer,StartTime,StopTime
Target1,RT1,2019-09-01 20:47:50.02,2019-09-01 20:57:50.02
Target2,RT1,2020-10-15 03:20:10.21,2020-10-15 04:01:48.21
Target3,RT1,2019-03-14 17:47:13.37,2019-03-14 17:57:21.52
Target4,RT1,2019-12-27 13:15:35.03,2019-12-27 14:57:14.52

Salida:

Observer                 object
StartTime        datetime64[ns]
StopTime         datetime64[ns]
Elapsed_time    timedelta64[ns]
dtype: object
        Observer               StartTime                StopTime  
Target                                                             
Target1      RT1 2019-09-01 20:47:50.020 2019-09-01 20:57:50.020   
Target2      RT1 2020-10-15 03:20:10.210 2020-10-15 04:01:48.210   
Target3      RT1 2019-03-14 17:47:13.370 2019-03-14 17:57:21.520   
Target4      RT1 2019-12-27 13:15:35.030 2019-12-27 14:57:14.520   

           Elapsed_time  
Target                   
Target1        00:10:00  
Target2        00:41:38  
Target3 00:10:08.150000  
Target4 01:41:39.490000

He creado una nueva columna mostrando la diferencia de tiempo entre ambas columnas.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *