Sie können die Funktion verwenden tz_localize
, um einen Zeitstempel oder eine DateTimeIndex-Zeitzone bekannt zu machen. Wie können Sie jedoch das Gegenteil tun: Wie können Sie einen zeitzonenbewussten Zeitstempel in einen naiven umwandeln, während die Zeitzone erhalten bleibt?
Ein Beispiel:
In [82]: t = pd.date_range(start="2013-05-18 12:00:00", periods=10, freq='s', tz="Europe/Brussels")
In [83]: t
Out[83]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 12:00:00, ..., 2013-05-18 12:00:09]
Length: 10, Freq: S, Timezone: Europe/Brussels
Ich könnte die Zeitzone entfernen, indem ich sie auf Keine setze, aber dann wird das Ergebnis in UTC konvertiert (12 Uhr wurde 10):
In [86]: t.tz = None
In [87]: t
Out[87]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 10:00:00, ..., 2013-05-18 10:00:09]
Length: 10, Freq: S, Timezone: None
Gibt es eine andere Möglichkeit, einen DateTimeIndex in eine naive Zeitzone zu konvertieren, aber unter Beibehaltung der Zeitzone, in der er festgelegt wurde?
Einige Zusammenhänge zu dem Grund, warum ich dies frage: Ich möchte mit zeitzonen-naiven Zeitreihen arbeiten (um den zusätzlichen Aufwand mit Zeitzonen zu vermeiden, und ich brauche sie nicht für den Fall, an dem ich arbeite).
Aber aus irgendeinem Grund muss ich mich in meiner lokalen Zeitzone (Europa / Brüssel) mit einer zeitzonenbewussten Zeitreihe befassen. Da alle meine anderen Daten zeitzonennaiv sind (aber in meiner lokalen Zeitzone dargestellt werden), möchte ich diese Zeitreihen in naiv konvertieren, um weiter damit arbeiten zu können. Sie muss jedoch auch in meiner lokalen Zeitzone dargestellt werden (entfernen Sie einfach die Zeitzoneninformationen). ohne die vom Benutzer sichtbare Zeit in UTC umzuwandeln ).
Ich weiß, dass die Zeit tatsächlich intern als UTC gespeichert und nur dann in eine andere Zeitzone konvertiert wird, wenn Sie sie darstellen. Daher muss es eine Konvertierung geben, wenn ich sie "delokalisieren" möchte. Mit dem Python-Datum / Uhrzeit-Modul können Sie beispielsweise die Zeitzone wie folgt "entfernen":
In [119]: d = pd.Timestamp("2013-05-18 12:00:00", tz="Europe/Brussels")
In [120]: d
Out[120]: <Timestamp: 2013-05-18 12:00:00+0200 CEST, tz=Europe/Brussels>
In [121]: d.replace(tzinfo=None)
Out[121]: <Timestamp: 2013-05-18 12:00:00>
Auf dieser Grundlage könnte ich Folgendes tun, aber ich nehme an, dass dies bei der Arbeit mit einer größeren Zeitreihe nicht sehr effizient ist:
In [124]: t
Out[124]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 12:00:00, ..., 2013-05-18 12:00:09]
Length: 10, Freq: S, Timezone: Europe/Brussels
In [125]: pd.DatetimeIndex([i.replace(tzinfo=None) for i in t])
Out[125]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 12:00:00, ..., 2013-05-18 12:00:09]
Length: 10, Freq: None, Timezone: None
replace
.
tz_localize
das replace(tzinfo=None)
Gegenteil davon, was das für Datumsangaben tut, aber es ist in der Tat kein sehr offensichtlicher Weg.