※記事内に商品プロモーションを含むことがあります。
はじめに
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 |
- |