Python: Konvertiert timedelta in int in einem Datenrahmen

111

Ich möchte eine Spalte in einem Pandas-Datenrahmen erstellen, die eine ganzzahlige Darstellung der Anzahl der Tage in einer Zeitdelta-Spalte ist. Ist es möglich, 'datetime.days' zu verwenden oder muss ich etwas mehr manuell machen?

Timedelta-Spalte

7 Tage, 23:29:00

ganzzahlige Tagesspalte

7

Asaf Hanish
quelle
12
Haben Sie versucht zu verwenden timedelta.days?
Ffisegydd

Antworten:

159

Verwenden Sie das dt.daysAttribut. Greifen Sie auf dieses Attribut zu über:

timedelta_series.dt.days

Auf die gleiche Weise können Sie auch die Attribute secondsund microsecondsabrufen.

abeboparebop
quelle
11
Ich mag diesen Kommentar der Einfachheit halber und ohne den Import einer anderen Bibliothek.
NickBraunagel
67

Sie können dies tun, wo tdsich Ihre Zeitreihen befinden. Die Division wandelt die Nanosekunden-Deltas in Tagesdeltas um, und die Umwandlung in int fällt auf ganze Tage ab.

import numpy as np

(td / np.timedelta64(1, 'D')).astype(int)
chrisb
quelle
1
Vielen Dank! Auch nach weiteren 15 Minuten Suche habe ich dies gefunden. stackoverflow.com/questions/18215317/…
Asaf Hanish
Was ist das /für zwischen tdund np?
Jason Goal
Es ist der timedelta64-Divisionsoperator. Das Teilen von td durch ein 1-Tages-Zeitdelta ergibt die (möglicherweise gebrochene) Anzahl von Tagen, die in td dargestellt sind. In diesem Fall nicht erforderlich, aber es ist sehr nützlich, wenn Sie herausfinden möchten, wie viele 15-Minuten-Intervalle td darstellt
David Waterworth,
22

Timedelta Objekte haben nur Lese Instanz Attribute .days, .secondsund .microseconds.

Qiao Zhang
quelle
6

Wenn die Frage nicht nur "wie man auf eine ganzzahlige Form des Zeitdeltas zugreift?" aber "wie konvertiere ich die timedelta-Spalte im Datenrahmen in ein int?" Die Antwort könnte etwas anders sein. Zusätzlich zum .dt.daysAccessor benötigen Sie entweder df.astypeoderpd.to_numeric

Jede dieser Optionen sollte helfen:

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

oder

df['tdColumn'] = df['tdColumn'].dt.days.astype('int16')
CheapSquier
quelle
Hallo, ich habe es versucht, aber ich habe ValueError erhalten: Nicht endliche Werte (NA oder inf) können nicht in Ganzzahlen konvertiert werden, da die Pandas-Reihe Nans enthält. Weißt du, wen du das klären sollst ???
Pablito
Die zweite Option hat bei mir funktioniert und die Datumswerte waren vom Typ timedelta64[ns]. Wenn Ihre Daten NaN sind, konvertieren Sie sie zuerst mit der Pandas- to_datetimeFunktion in Datum / Uhrzeit und verwenden Sie dann die zweite Option oben. Weitere Informationen finden Sie unter to_datetime
Onen simon