今回は、複数の時系列データでそれぞれが別のタイムゾーンを持つ場合、それらのデータを演算した結果がどうなるのかを見ていこう。
まず、以下のような10日間の日付範囲があるとする。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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 |
これをスライシングで二つの時系列データに分割し、それぞれ別のタイムゾーンを設定する。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 | 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に変換される。
1 2 3 4 5 6 7 8 | 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') |