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

Asaf Hanish
fuente
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.

abeboparebop
fuente
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)
Chrisb
fuente
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.

Qiao Zhang
fuente
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')
CheapSquier
fuente
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