※記事内に商品プロモーションを含むことがあります。
はじめに
PandasのTimestampクラスでタイムゾーンを扱う方法をまとめた。Timestampオブジェクトにタイムゾーンを設定する方法や、異なるタイムゾーンに変換する方法について述べる。
Timestampクラスの基本については以下の記事を参照。
PandasのTimestampで時刻を扱う
以降では、ライブラリを以下のようにインストールしていることを前提とする。なお、pytzはタイムゾーンを扱うライブラリである。
|
|
また、環境は以下の通り。
| バージョン | |
|---|---|
| Python | 3.7.4 |
| Pandas | 0.25.1 |
| pytz | 2019.3 |
Timestampクラスのタイムゾーン
Timestampクラスのオブジェクトは、タイムゾーンの情報を持っていない状態と、持っている状態を取り得る。Pandasのリファレンスでは、前者をtz-native, 後者をtz-awareと呼ぶ。
両社の違いを以下に示す。
|
|
タイムゾーンを持ったTimestampオブジェクトの作成
タイムゾーンを持ったTimestampオブジェクトの作成する方法はいくつかあるが、ここでは以下の2つを扱う。
pd.Timestampのtz引数に文字列でタイムゾーンを渡す。pd.Timestampのtz引数にpytz.timezoneオブジェクトを渡す。
文字列で設定する場合
pd.Timestampのtz引数にタイムゾーンを表す文字列を与えると、タイムゾーンを持つオブジェクトを作成できる。
|
|
指定可能なタイムゾーン文字列はpytz.all_timezonesで確認できる。
タイムゾーンの例を以下に示す。都市名や国名、または一般に良く使われる略称があてはめられている。
| 文字列 | UTCとの時差 | 備考 |
|---|---|---|
| ‘America/New_York’ | -5 | ニューヨーク |
| Asia/Tokyo' | +9 | 東京 |
| ‘EST’ | -5 | 米国東部時間 |
| ‘Europe/Berlin’ | +1* | ベルリン |
| ‘Japan’ | +9 | 日本 |
| ‘UCT’ | 0 | 世界標準時 |
* 夏時間の場合は+2
pytz.timezoneオブジェクトで設定する場合
pytz.timezoneにタイムゾーンを表す文字列を与え、さらにpd.Timestampのtz引数に与えると、タイムゾーンを持つオブジェクトを作成できる。
|
|
タイムゾーンを持った現在時刻を取得
タイムゾーンを持つ現在時刻を取得する場合は、pd.Timestamp.now()のtz引数にタイムゾーン情報を渡す。
|
|
タイムゾーン情報の取得
Timestampオブジェクトのtzinfo属性からpytz.timezoneオブジェクトを取得できる。さらに、pytz.timezoneオブジェクトのzone属性からタイムゾーン文字列を取得できる。
|
|
タイムゾーンの変換
タイムゾーンがあるTimestampオブジェクトを異なるタイムゾーンに変換するには、tz_convertメソッドを用いる。tz_convertの引数は文字列でもpytz.timezoneオブジェクトでも良い。
|
|
タイムゾーンがあるTimestampオブジェクトからタイムゾーン情報を削除する場合、2つの方法がある。UCT時刻に変換してからタイムゾーンを削除するには、tz_convertメソッドの引数にNoneを与える。また、現地時刻のままタイムゾーンを削除するには、tz_localizeメソッドの引数にNoneを与える。
|
|
タイムゾーンがないTimestampオブジェクトにタイムゾーンを設定するには、tz_localizeメソッドを用いる。tz_localizeの引数は文字列でもpytz.timezoneオブジェクトでも良い。
|
|
以上の変換をまとめると、以下の表となる。
| 変換前/変換後 | tzあり | tzなし |
|---|---|---|
| tzあり | tz_convert |
tz_convert/tz_localize |
| tzなし | tz_localize |
- |