この関数tz_localize
を使用して Timestamp または DateTimeIndex タイムゾーンを認識させることができますが、その逆を行うにはどうすればよいでしょうか: タイムゾーンを保持しながら、タイムゾーンを認識するタイムスタンプをナイーブなタイムスタンプに変換するにはどうすればよいでしょうか?
例:
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
タイムゾーンを None に設定して削除することもできますが、結果は UTC に変換されます (12 時が 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
DateTimeIndex をナイーブなタイムゾーンに変換できる別の方法はありますが、設定されたタイムゾーンを保持していますか?
私がこれを尋ねている理由についてのいくつかの文脈:私はタイムゾーンの単純な時系列を扱いたいです(タイムゾーンの余分な手間を避けるために、私が取り組んでいるケースでは必要ありません)。
しかし、何らかの理由で、ローカル タイムゾーン (ヨーロッパ/ブリュッセル) でタイムゾーン対応の時系列を処理する必要があります。他のすべてのデータはタイムゾーン ナイーブ (ただし、ローカル タイムゾーンで表される) であるため、この時系列をナイーブに変換してさらに作業したいと考えていますが、ローカル タイムゾーンでも表す必要があります (タイムゾーン情報を削除するだけで、ユーザーに表示される時刻を UTC に変換せずに)。
時間は実際には UTC として内部に保存され、それを表すときにのみ別のタイムゾーンに変換されることを知っているため、「非ローカライズ」したい場合は何らかの変換が必要です。たとえば、Python の datetime モジュールを使用すると、次のようにタイムゾーンを「削除」できます。
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>
したがって、これに基づいて、次のことができますが、より大きな時系列で作業する場合、これはあまり効率的ではないと思います。
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