Truncate `TimeStamp` - Spalte auf Stunde Präzision in der pandas `DataFrame`
Ich habe eine pandas.DataFrame
genannt df
welches einen automatisch generierten index einer Spalte dt
:
df['dt'].dtype, df['dt'][0]
# (dtype('<M8[ns]'), Timestamp('2014-10-01 10:02:45'))
Was ich möchte zu tun ist, erstellen Sie eine neue Spalte abgeschnitten Stunde Präzision. Ich bin derzeit mit:
df['dt2'] = df['dt'].apply(lambda L: datetime(L.year, L.month, L.day, L.hour))
Das funktioniert, also geht das in Ordnung. Allerdings habe ich eine leise Ahnung, es gibt einige nette Weise mit pandas.tseries.offsets
oder die Erstellung eines DatetimeIndex
oder ähnliches.
Also, wenn möglich, gibt es einige pandas
Zauberei zu tun?
- Sie wollen also die gleichen Werte, aber ohne Sekunden korrigieren
- Ohne Minuten oder Sekunden... ich bin nur daran interessiert, Stunde Präzision
Du musst angemeldet sein, um einen Kommentar abzugeben.
In pandas 0.18.0 und später, gibt es datetime -
Boden
,ceil
undround
Methoden zur Runde Zeitstempel zu einem festen Genauigkeit/Frequenz. Zum abrunden Stunde Präzision, die Sie verwenden können:Hier ist eine weitere alternative zum abschneiden der Zeitstempel. Im Gegensatz zu
floor
unterstützt es abgeschnitten, um eine Genauigkeit wie Jahr oder Monat.Können Sie vorübergehend passen Sie die Präzision der Einheit von der zugrunde liegenden NumPy
datetime64
Datentyp, ändern Sie es aus[ns]
zu[h]
:Diese schneidet alles zu Stunde Präzision. Zum Beispiel:
Gleichen Methode sollte funktionieren für jede andere Einheit: Monate
'M'
-, Minuten -'m'
, und so weiter:'<M8[Y]'
'<M8[M]'
'<M8[D]'
'<M8[m]'
'<M8[s]'
datetime.replace
, das ist die häufigste Lösung erwähnt auf SO.Einer Methode, die ich in der Vergangenheit verwendet habe, um dieses Ziel zu erreichen wurde das folgende (ziemlich ähnlich zu dem, was Sie bereits tut, aber dachte, ich würde werfen es da draußen sowieso):