Saltar al contenido

Convertir timedelta64[ns] columna a segundos en Python Pandas DataFrame

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *