Python: converti timedelta in int in un dataframe


111

Vorrei creare una colonna in un frame di dati pandas che è una rappresentazione intera del numero di giorni in una colonna timedelta. È possibile utilizzare "datetime.days" o devo fare qualcosa di più manuale?

colonna timedelta

7 giorni, 23:29:00

colonna numero intero giorno

7


12
Hai provato a usare timedelta.days?
— Ffisegydd

Risposte:


160

Usa l' dt.daysattributo. Accedi a questo attributo tramite:

timedelta_series.dt.days

Puoi anche ottenere gli attributi secondse microsecondsallo stesso modo.


11
Mi piace questo commento per la semplicità e per non richiedere l'importazione di un'altra libreria.
— NickBraunagel

67

Potresti farlo, dov'è la tdtua serie di timedeltas. La divisione converte i delta in nanosecondi in delta giornalieri e la conversione in int si riduce a giorni interi.

import numpy as np

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

1
Grazie! Anche dopo altri 15 minuti di ricerca ho trovato questo. stackoverflow.com/questions/18215317/…
— Asaf Hanish

a cosa serve /tra tde np?
— Jason Goal

È l'operatore di divisione timedelta64. Dividendo td per un delta di 1 giorno si ottiene il numero (possibilmente frazionario) di giorni rappresentato in td. Non richiesto in questo caso, ma è davvero utile se si vuole calcolare quanti intervalli di 15 minuti rappresenta td
— David Waterworth

22

Oggetti timedelta hanno attributi di sola lettura esempio .days, .secondse .microseconds.


6

Se la domanda non è solo "come accedere a una forma intera del timedelta?" ma "come convertire la colonna timedelta nel dataframe in un int?" la risposta potrebbe essere leggermente diversa. Oltre alla funzione di .dt.daysaccesso è necessario df.astypeopd.to_numeric

Entrambe queste opzioni dovrebbero aiutare:

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

o

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

Ciao, ho provato questo, ma ho ricevuto ValueError: Impossibile convertire valori non finiti (NA o inf) in numeri interi perché ci sono nan nella serie dei panda. Sai chi deve risolvere questo problema ???
— Pablito

La seconda opzione ha funzionato per me ei valori della data erano di tipo timedelta64[ns]. Se le tue date sono NaN, prima convertile in datetime usando la to_datetimefunzione panda , quindi usa la seconda opzione sopra. Per maggiori dettagli controlla to_datetime
— Onen simon il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.