Pandas Transformar columna con MM: SS, decimales en número de segundos.

Hey: Pasé varias horas tratando de hacer algo bastante simple, pero no pude resolverlo.

Tengo un dataframe con una columna, df [‘Tiempo’] que contiene el tiempo, empezando desde 0, hasta 20 minutos, como este:

1:10,10 1:16,32 3:03,04 

Los primeros son minutos, los segundos son segundos, los terceros son milisegundos (solo dos dígitos).

¿Hay una manera de transformar automáticamente esa columna en segundos con Pandas, y sin hacer de esa columna el índice de tiempo de la serie?

Ya probé lo siguiente pero no funciona:

 pd.to_datetime(df['Time']).convert('s') # AttributeError: 'Series' object has no attribute 'convert' 

Si la única forma es analizar el tiempo, simplemente señale eso y prepararé una respuesta adecuada / detallada a esta pregunta, no pierda su tiempo =) ¡Gracias!

Código:

 import pandas as pd import numpy as np import datetime df = pd.DataFrame({'Time':['1:10,10', '1:16,32', '3:03,04']}) df['time'] = df.Time.apply(lambda x: datetime.datetime.strptime(x,'%M:%S,%f')) df['timedelta'] = df.time - datetime.datetime.strptime('00:00,0','%M:%S,%f') df['secs'] = df['timedelta'].apply(lambda x: x / np.timedelta64(1, 's')) print df 

Salida:

  Time time timedelta secs 0 1:10,10 1900-01-01 00:01:10.100000 00:01:10.100000 70.10 1 1:16,32 1900-01-01 00:01:16.320000 00:01:16.320000 76.32 2 3:03,04 1900-01-01 00:03:03.040000 00:03:03.040000 183.04 

Si también tienes deltas de tiempo negativos:

 import pandas as pd import numpy as np import datetime import re regex = re.compile(r"(?P-)?((?P\d+):)?(?P\d+)(,(?P\d{2}))?") def parse_time(time_str): parts = regex.match(time_str) if not parts: return parts = parts.groupdict() time_params = {} for (name, param) in parts.iteritems(): if param and (name != 'minus'): time_params[name] = int(param) time_params['milliseconds'] = time_params['centiseconds']*10 del time_params['centiseconds'] return (-1 if parts['minus'] else 1) * datetime.timedelta(**time_params) df = pd.DataFrame({'Time':['-1:10,10', '1:16,32', '3:03,04']}) df['timedelta'] = df.Time.apply(lambda x: parse_time(x)) df['secs'] = df['timedelta'].apply(lambda x: x / np.timedelta64(1, 's')) print df 

Salida:

  Time timedelta secs 0 -1:10,10 -00:01:10.100000 -70.10 1 1:16,32 00:01:16.320000 76.32 2 3:03,04 00:03:03.040000 183.04