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.