Możesz użyć tej funkcji, tz_localize
aby wskazać strefę czasową Timestamp lub DateTimeIndex, ale jak możesz zrobić coś przeciwnego: jak przekonwertować sygnaturę czasową uwzględniającą strefę czasową na naiwną, zachowując jej strefę czasową?
Przykład:
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
Mogłem usunąć strefę czasową, ustawiając ją na Brak, ale wynik jest konwertowany na UTC (godzina 12 stała się 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
Czy jest inny sposób na przekonwertowanie DateTimeIndex na naiwną strefę czasową, ale zachowując strefę czasową, w której została ustawiona?
Pewien kontekst na temat powodu, dla którego pytam: chcę pracować z naiwnymi seriami czasowymi dotyczącymi stref czasowych (aby uniknąć dodatkowych problemów ze strefami czasowymi i nie potrzebuję ich w przypadku, nad którym pracuję).
Ale z jakiegoś powodu mam do czynienia z seriami czasowymi uwzględniającymi strefę czasową w mojej lokalnej strefie czasowej (Europa / Bruksela). Ponieważ wszystkie moje inne dane są naiwne dla strefy czasowej (ale reprezentowane w mojej lokalnej strefie czasowej), chcę przekonwertować tę serię czasową na naiwną, aby dalej z nią pracować, ale musi również być reprezentowana w mojej lokalnej strefie czasowej (więc po prostu usuń informacje o strefie czasowej, bez konwersji czasu widocznego dla użytkownika na UTC).
Wiem, że czas jest w rzeczywistości przechowywany wewnętrznie jako UTC i jest konwertowany na inną strefę czasową tylko wtedy, gdy go reprezentujesz, więc musi nastąpić jakaś konwersja, gdy chcę go „zdelokalizować”. Na przykład za pomocą modułu datetime w języku python można „usunąć” strefę czasową w następujący sposób:
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>
Na tej podstawie mógłbym więc wykonać następujące czynności, ale przypuszczam, że nie będzie to zbyt wydajne podczas pracy z większymi seriami czasu:
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