この関数tz_localizeを使用して、タイムスタンプまたは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
タイムゾーンを[なし]に設定することで削除できますが、結果は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