今回は、複数の時系列データでそれぞれが別のタイムゾーンを持つ場合、それらのデータを演算した結果がどうなるのかを見ていこう。
まず、以下のような10日間の日付範囲があるとする。
import pandas as pd import numpy as np date_rng = pd.date_range('10/17/2019 21:00', periods=10, freq='B') # DatetimeIndex(['2019-10-17 21:00:00', '2019-10-18 21:00:00', # '2019-10-21 21:00:00', '2019-10-22 21:00:00', # '2019-10-23 21:00:00', '2019-10-24 21:00:00', # '2019-10-25 21:00:00', '2019-10-28 21:00:00', # '2019-10-29 21:00:00', '2019-10-30 21:00:00'], # dtype='datetime64[ns]', freq='B') ts = pd.Series(np.random.randn(len(date_rng)), index=date_rng) # 2019-10-17 21:00:00 -0.225737 # 2019-10-18 21:00:00 -0.285423 # 2019-10-21 21:00:00 -1.360346 # 2019-10-22 21:00:00 1.929381 # 2019-10-23 21:00:00 -0.237410 # 2019-10-24 21:00:00 -0.600526 # 2019-10-25 21:00:00 -1.399074 # 2019-10-28 21:00:00 -2.491753 # 2019-10-29 21:00:00 0.588928 # 2019-10-30 21:00:00 -0.564150 # Freq: B, dtype: float64
これをスライシングで二つの時系列データに分割し、それぞれ別のタイムゾーンを設定する。
ts1 = ts[:7].tz_localize('Asia/Tokyo') # 2019-10-17 21:00:00+09:00 -0.225737 # 2019-10-18 21:00:00+09:00 -0.285423 # 2019-10-21 21:00:00+09:00 -1.360346 # 2019-10-22 21:00:00+09:00 1.929381 # 2019-10-23 21:00:00+09:00 -0.237410 # 2019-10-24 21:00:00+09:00 -0.600526 # 2019-10-25 21:00:00+09:00 -1.399074 # Freq: B, dtype: float64 ts2 = ts1[2:].tz_convert('Europe/London') # 2019-10-21 13:00:00+01:00 -1.360346 # 2019-10-22 13:00:00+01:00 1.929381 # 2019-10-23 13:00:00+01:00 -0.237410 # 2019-10-24 13:00:00+01:00 -0.600526 # 2019-10-25 13:00:00+01:00 -1.399074 # Freq: B, dtype: float64
この二つの時系列データを演算した場合、結果として得られる時系列データのタイムゾーンはUTCに変換される。
result = ts1 + ts2 result.index # DatetimeIndex(['2019-10-17 12:00:00+00:00', '2019-10-18 12:00:00+00:00', # '2019-10-21 12:00:00+00:00', '2019-10-22 12:00:00+00:00', # '2019-10-23 12:00:00+00:00', '2019-10-24 12:00:00+00:00', # '2019-10-25 12:00:00+00:00'], # dtype='datetime64[ns, UTC]', freq='B')