Python: convierte timedelta en int en un marco de datos


111

Me gustaría crear una columna en un marco de datos de pandas que sea una representación entera del número de días en una columna timedelta. ¿Es posible usar 'datetime.days' o necesito hacer algo más manual?

columna timedelta

7 días, 23:29:00

columna de día entero

7


12
¿Has intentado usar timedelta.days?
Ffisegydd

Respuestas:


160

Utilice el dt.daysatributo. Acceda a este atributo a través de:

timedelta_series.dt.days

También puede obtener los atributos secondsy microsecondsde la misma manera.


11
Me gusta este comentario por la simplicidad y por no requerir la importación de otra biblioteca.
NickBraunagel

67

Podrías hacer esto, dónde tdestá tu serie de timedeltas. La división convierte los deltas de nanosegundos en deltas de días y la conversión a int se reduce a días completos.

import numpy as np

(td / np.timedelta64(1, 'D')).astype(int)

1
¡Gracias! Además, después de 15 minutos más de búsqueda, encontré esto. stackoverflow.com/questions/18215317/…
Asaf Hanish

para que sirve /entre tdy np?
Jason Goal

Es el operador de división timedelta64. Dividir td por un delta de tiempo de 1 día da como resultado el número (posiblemente fraccionario) de días representados en td. No es necesario en este caso, pero es realmente útil si quiere averiguar cuántos intervalos de 15 minutos representa td
David Waterworth

22

Objetos de sólo lectura timedelta han atributos de instancia .days, .secondsy .microseconds.


6

Si la pregunta no es solo "¿cómo acceder a una forma entera del timedelta?" pero "¿cómo convertir la columna timedelta en el marco de datos a un int?" la respuesta puede ser un poco diferente. Además del .dt.daysdescriptor de acceso, necesita df.astypeopd.to_numeric

Cualquiera de estas opciones debería ayudar:

df['tdColumn'] = pd.to_numeric(df['tdColumn'].dt.days, downcast='integer')

o

df['tdColumn'] = df['tdColumn'].dt.days.astype('int16')

Hola, probé esto, pero obtuve ValueError: No se pueden convertir valores no finitos (NA o inf) a números enteros porque hay nans en la serie pandas. ¿Sabes a quién solucionar esto ???
Pablito

La segunda opción funcionó para mí y los valores de fecha eran de tipo timedelta64[ns]. Si sus fechas son NaN, primero conviértalas a fecha y hora usando la to_datetimefunción pandas , luego use la segunda opción anterior. Para obtener más detalles, visite to_datetime
Onen simon
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.