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
en_NZ
nl_NL.UTF-8
pt_BR.UTF-8
fr_CH.ISO8859-15
eu_ES.ISO8859-15
en_US.US-ASCII
af_ZA
bg_BG
cs_CZ.UTF-8
fi_FI
zh_CN.UTF-8
eu_ES
sk_SK.ISO8859-2
nl_BE
fr_BE
sk_SK
en_US.UTF-8
en_NZ.ISO8859-1
de_CH
sk_SK.UTF-8
de_DE.UTF-8
am_ET.UTF-8
zh_HK
be_BY.UTF-8
uk_UA
pt_PT.ISO8859-1
en_AU.US-ASCII
kk_KZ.PT154
en_US
nl_BE.ISO8859-15
de_AT.ISO8859-1
hr_HR.ISO8859-2
fr_FR.ISO8859-1
af_ZA.UTF-8
am_ET
fi_FI.ISO8859-1
ro_RO.UTF-8
af_ZA.ISO8859-15
en_NZ.UTF-8
fi_FI.UTF-8
hr_HR.UTF-8
da_DK.UTF-8
ca_ES.ISO8859-1
en_AU.ISO8859-15
ro_RO.ISO8859-2
de_AT.UTF-8
pt_PT.ISO8859-15
sv_SE
fr_CA.ISO8859-1
fr_BE.ISO8859-1
en_US.ISO8859-15
it_CH.ISO8859-1
en_NZ.ISO8859-15
en_AU.UTF-8
de_AT.ISO8859-15
af_ZA.ISO8859-1
hu_HU.UTF-8
et_EE.UTF-8
he_IL.UTF-8
uk_UA.KOI8-U
be_BY
kk_KZ
hu_HU.ISO8859-2
it_CH
pt_BR
ko_KR
it_IT
fr_BE.UTF-8
ru_RU.ISO8859-5
zh_TW
zh_CN.GB2312
no_NO.ISO8859-15
de_DE.ISO8859-15
en_CA
fr_CH.UTF-8
sl_SI.UTF-8
uk_UA.ISO8859-5
pt_PT
hr_HR
cs_CZ
fr_CH
he_IL
zh_CN.GBK
zh_CN.GB18030
fr_CA
pl_PL.UTF-8
ja_JP.SJIS
sr_YU.ISO8859-5
be_BY.CP1251
sr_YU.ISO8859-2
sv_SE.UTF-8
sr_YU.UTF-8
de_CH.UTF-8
sl_SI
pt_PT.UTF-8
ro_RO
en_NZ.US-ASCII
ja_JP
zh_CN
fr_CH.ISO8859-1
ko_KR.eucKR
be_BY.ISO8859-5
nl_NL.ISO8859-15
en_GB.ISO8859-1
en_CA.US-ASCII
is_IS.ISO8859-1
ru_RU.CP866
nl_NL
fr_CA.ISO8859-15
sv_SE.ISO8859-15
hy_AM
en_CA.ISO8859-15
en_US.ISO8859-1
zh_TW.Big5
ca_ES.UTF-8
ru_RU.CP1251
en_GB.UTF-8
en_GB.US-ASCII
ru_RU.UTF-8
eu_ES.UTF-8
es_ES.ISO8859-1
hu_HU
el_GR.ISO8859-7
en_AU
it_CH.UTF-8
en_GB
sl_SI.ISO8859-2
ru_RU.KOI8-R
nl_BE.UTF-8
et_EE
fr_FR.ISO8859-15
cs_CZ.ISO8859-2
lt_LT.UTF-8
pl_PL.ISO8859-2
fr_BE.ISO8859-15
is_IS.UTF-8
tr_TR.ISO8859-9
da_DK.ISO8859-1
lt_LT.ISO8859-4
lt_LT.ISO8859-13
zh_TW.UTF-8
bg_BG.CP1251
el_GR.UTF-8
be_BY.CP1131
da_DK.ISO8859-15
is_IS.ISO8859-15
no_NO.ISO8859-1
nl_NL.ISO8859-1
nl_BE.ISO8859-1
sv_SE.ISO8859-1
pt_BR.ISO8859-1
zh_CN.eucCN
it_IT.UTF-8
en_CA.UTF-8
uk_UA.UTF-8
de_CH.ISO8859-15
de_DE.ISO8859-1
ca_ES
sr_YU
hy_AM.ARMSCII-8
ru_RU
zh_HK.UTF-8
eu_ES.ISO8859-1
is_IS
bg_BG.UTF-8
ja_JP.UTF-8
it_CH.ISO8859-15
fr_FR.UTF-8
ko_KR.UTF-8
et_EE.ISO8859-15
kk_KZ.UTF-8
ca_ES.ISO8859-15
en_IE.UTF-8
es_ES
de_CH.ISO8859-1
en_CA.ISO8859-1
es_ES.ISO8859-15
en_AU.ISO8859-1
el_GR
da_DK
no_NO
it_IT.ISO8859-1
en_IE
zh_HK.Big5HKSCS
hi_IN.ISCII-DEV
ja_JP.eucJP
it_IT.ISO8859-15
pl_PL
ko_KR.CP949
fr_CA.UTF-8
fi_FI.ISO8859-15
en_GB.ISO8859-15
fr_FR
hy_AM.UTF-8
no_NO.UTF-8
es_ES.UTF-8
de_AT
tr_TR.UTF-8
de_DE
lt_LT
tr_TR
C
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 |