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.