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


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.


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)

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.


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')

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.