Solución:
Esto funciona correctamente en la versión actual de Pandas (versión 0.14):
In [132]: df[:5]['duration'] / np.timedelta64(1, 's')
Out[132]:
0 1232
1 1390
2 1495
3 797
4 1132
Name: duration, dtype: float64
Aquí hay una solución para las versiones anteriores de Pandas / NumPy:
In [131]: df[:5]['duration'].values.view('<i8')/10**9
Out[131]: array([1232, 1390, 1495, 797, 1132], dtype=int64)
Los datos timedelta64 y datetime64 se almacenan internamente como entradas de 8 bytes (dtype
'<i8'
). Entonces, lo anterior ve los timedelta64s como entradas de 8 bytes y luego hace una división de enteros para convertir nanosegundos a segundos.
Tenga en cuenta que necesita NumPy versión 1.7 o más reciente para trabajar con datetime64 / timedelta64s.
Utilice el descriptor de acceso Series dt para obtener acceso a los métodos y atributos de una serie de fecha y hora (timedelta).
>>> s
0 -1 days +23:45:14.304000
1 -1 days +23:46:57.132000
2 -1 days +23:49:25.913000
3 -1 days +23:59:48.913000
4 00:00:00.820000
dtype: timedelta64[ns]
>>>
>>> s.dt.total_seconds()
0 -885.696
1 -782.868
2 -634.087
3 -11.087
4 0.820
dtype: float64
Hay otros Accessors de la serie Pandas para tipos de datos de cadena, categóricos y dispersos.
Me acabo de dar cuenta de que es un hilo antiguo, de todos modos lo dejo aquí si los vagabundos como yo solo hacen clic en los 5 primeros resultados del motor de búsqueda y terminan aquí.
Asegúrese de que sus tipos sean correctos.
-
Si quieres convertir fecha y hora para segundos , solo sume los segundos por cada hora, minuto y segundos del objeto de fecha y hora si es para la duración dentro de una fecha.
-
- horas – horas x 3600 = segundos
-
- minutos – minutos x 60 = segundos
-
- segundos – segundos
-
linear_df['duration'].dt.hour*3600 + linear_df['duration'].dt.minute*60 + linear_df['duration'].dt.second
- Si quieres convertir timedelta para segundos usa el de abajo.
linear_df[:5]['duration'].astype('timedelta64[s]')
Lo hice funcionar así:
Las columnas start_dt y end_dt tienen este formato:
import datetime
linear_df[:5]['start_dt']
0 1970-02-22 21:32:48.000
1 2016-12-30 17:47:33.216
2 2016-12-31 09:33:27.931
3 2016-12-31 09:52:53.486
4 2016-12-31 10:29:44.611
Name: start_dt, dtype: datetime64[ns]
Tuve mi duración en timedelta64[ns] formato, que era la resta de comienzo y fin valores de fecha y hora.
linear_df['duration'] = linear_df['end_dt'] - linear_df['start_dt']
La columna de duración resultante se ve así
linear_df[:5]['duration']
0 0 days 00:00:14
1 2 days 17:44:50.558000
2 0 days 15:37:28.418000
3 0 days 18:45:45.727000
4 0 days 19:21:27.159000
Name: duration, dtype: timedelta64[ns]
Usando pandas tuve mis segundos de duración entre dos fechas en flotador. Más fácil de comparar o filtrar su duración después.
linear_df[:5]['duration'].astype('timedelta64[s]')
0 14.0
1 236690.0
2 56248.0
3 67545.0
4 69687.0
Name: duration, dtype: float64
En mi caso, si quiero obtener toda la duración que sea más de 1 segundo.
Espero eso ayude.