Datum und Uhrzeit#
Mit pandas könnt ihr Series
mit Datums- und Zeitinformationen erstellen. Im folgenden werden wir häufige Operationen mit Datumsdaten zeigen.
Hinweis:
pandas unterstützt Datumsangaben, die in UTC-Werten gespeichert sind und den Datentyp datetime64[ns]
verwenden. Es werden auch lokale Zeiten aus einer einzigen Zeitzone unterstützt. Mehrere Zeitzonen werden durch ein pandas.Timestamp-Objekt unterstützt. Wenn ihr mit Zeiten aus mehreren Zeitzonen hantieren müsst, würde ich die Daten vermutlich nach
Zeitzonen aufteilen und für jede Zeitzone einen eigenen DataFrame
oder eine eigene Series
verwenden.
Siehe auch:
Laden von UTC-Zeitdaten#
[1]:
import pandas as pd
dt = pd.date_range("2022-03-27", periods=6, freq="H")
dt
[1]:
DatetimeIndex(['2022-03-27 00:00:00', '2022-03-27 01:00:00',
'2022-03-27 02:00:00', '2022-03-27 03:00:00',
'2022-03-27 04:00:00', '2022-03-27 05:00:00'],
dtype='datetime64[ns]', freq='H')
[2]:
utc = pd.to_datetime(dt, utc=True)
utc
[2]:
DatetimeIndex(['2022-03-27 00:00:00+00:00', '2022-03-27 01:00:00+00:00',
'2022-03-27 02:00:00+00:00', '2022-03-27 03:00:00+00:00',
'2022-03-27 04:00:00+00:00', '2022-03-27 05:00:00+00:00'],
dtype='datetime64[ns, UTC]', freq='H')
Hinweis:
Der Typ des Ergebnisses dtype='datetime64[ns, UTC]'
zeigt an, dass die Daten als UTC gespeichert sind.
Konvertieren wir diese Reihe in die Zeitzone Europe/Berlin:
[3]:
utc.tz_convert('Europe/Berlin')
[3]:
DatetimeIndex(['2022-03-27 01:00:00+01:00', '2022-03-27 03:00:00+02:00',
'2022-03-27 04:00:00+02:00', '2022-03-27 05:00:00+02:00',
'2022-03-27 06:00:00+02:00', '2022-03-27 07:00:00+02:00'],
dtype='datetime64[ns, Europe/Berlin]', freq='H')
Umrechnung der Ortszeit in UTC#
[4]:
local = utc.tz_convert('Europe/Berlin')
local.tz_convert('UTC')
[4]:
DatetimeIndex(['2022-03-27 00:00:00+00:00', '2022-03-27 01:00:00+00:00',
'2022-03-27 02:00:00+00:00', '2022-03-27 03:00:00+00:00',
'2022-03-27 04:00:00+00:00', '2022-03-27 05:00:00+00:00'],
dtype='datetime64[ns, UTC]', freq='H')
Umrechnung in Unixzeit#
Wenn ihr eine Series
mit UTC- oder Ortszeitinformationen habt, könnt ihr mit diesem Code die Sekunden nach der Unixzeit ermitteln:
[5]:
uts = pd.to_datetime(dt).view(int) / 10**9
uts
[5]:
array([1.6483392e+09, 1.6483428e+09, 1.6483464e+09, 1.6483500e+09,
1.6483536e+09, 1.6483572e+09])
Um die Unixzeit in UTC zu laden, könnt ihr wie folgt vorgehen:
[6]:
(pd.to_datetime(uts, unit='s').tz_localize('UTC'))
[6]:
DatetimeIndex(['2022-03-27 00:00:00+00:00', '2022-03-27 01:00:00+00:00',
'2022-03-27 02:00:00+00:00', '2022-03-27 03:00:00+00:00',
'2022-03-27 04:00:00+00:00', '2022-03-27 05:00:00+00:00'],
dtype='datetime64[ns, UTC]', freq=None)
Manipulation von Terminen#
Umwandeln in Strings#
Mit pandas.DatetimeIndex habt ihr einige Möglichkeiten, Datum und Uhrzeit in Strings umzuwandeln, z.B. in den Namen des Wochentags:
[7]:
local.day_name(locale='de_DE.UTF-8')
[7]:
Index(['Sonntag', 'Sonntag', 'Sonntag', 'Sonntag', 'Sonntag', 'Sonntag'], dtype='object')
Welche locale
bei euch zur Verfügung stehen, könnt ihr euch mit locale -a
anzeigen lassen:
[8]:
!locale -a
C
C.UTF-8
de_AT.utf8
de_BE.utf8
de_CH.utf8
de_DE.utf8
de_IT.utf8
de_LI.utf8
de_LU.utf8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IL
en_IL.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
POSIX
Weitere Attribute von DatetimeIndex
, mit denen sich Datum und Zeit in Strings umwandeln lassen, sind:
Attribut |
Beschreibung |
---|---|
|
das Jahr der |
|
der Monat als Januar |
|
der Tag der |
|
die Stunden der |
|
die Minuten der |
|
die Sekunden der |
|
die Mikrosekunden der |
|
die Nanosekunden von |
|
gibt ein Numpy-Array von Python |
|
gibt ein NumPy-Array von |
|
liefert ein numpy-Array von |
|
der ordinale Tag des Jahres |
|
der Tag der Woche mit Montag ( |
|
der Tag der Woche mit Montag ( |
|
der Tag der Woche mit Montag ( |
|
gibt das Jahresquartal zurück |
|
gibt die Zeitzone zurück |
|
gibt das Frequenzobjekt zurück, wenn es gesetzt ist, andernfalls |
|
gibt das Frequenz-Objekt als String zurück, wenn es gesetzt ist, andernfalls |
|
zeigt an, ob das Datum der erste Tag des Monats ist |
|
zeigt an, ob das Datum der letzte Tag des Monats ist |
|
zeigt an, ob das Datum der erste Tag eines Quartals ist |
|
zeigt an, ob das Datum der letzte Tag eines Quartals ist |
|
zeigt an, ob das Datum der erste Tag eines Jahres ist |
|
zeigt an, ob das Datum der letzte Tag eines Jahres ist |
|
Boolescher Indikator, ob das Datum in ein Schaltjahr fällt |
|
versucht, eine Zeichenkette zurückzugeben, die eine durch |
Es gibt jedoch auch einige Methoden, mit denen ihr den DatetimeIndex
in Stringsumwandeln könnt, z.B. strftime
:
[9]:
local.strftime('%d.%m.%Y')
[9]:
Index(['27.03.2022', '27.03.2022', '27.03.2022', '27.03.2022', '27.03.2022',
'27.03.2022'],
dtype='object')
Hinweis:
In strftime() and strptime() Format Codes erhaltet ihr eine Übersicht über die verschiedenen Formattierungsmöglichkeiten von strftime
.
Weitere Methoden sind:
Methode |
Beschreibung |
---|---|
|
konvertiert Zeiten in Mitternacht |
|
konvertiert in Index unter Verwendung des angegebenen Datumsformats |
|
rastet den Zeitstempel auf der nächsten auftretenden Frequenz ein |
|
konvertiert ein |
|
Lokalisiert |
|
rundet die Daten zur nächsten angegebenen Frequenz |
|
rundet die Daten ab auf die angegebene Frequenz |
|
rundet die Daten auf auf die angegebene Frequenz |
|
wandelt die Daten um in einen PeriodArray/Index bei einer bestimmten Frequenz |
|
Berechnet |
|
gibt |
|
erzeugt eine |
|
erzeugt einen |
|
gibt die Monatsnamen des |
|
gibt die Tagesnamen des |
|
gibt den Mittelwert des Arrays zurück |
|
gibt die Standardabweichung der Stichprobe über die angeforderte Achse zurück |