pandasで時系列を扱うオブジェクトは、タイムスタンプによってインデックス付けされたシリーズが基本となる。
この時、タイムスタンプはdatetimeオブジェクトや文字列が使われる。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 | from datetime import datetime import pandas as pd import numpy as np dates = [ datetime( 2019 , 10 , 1 ), datetime( 2019 , 10 , 2 ), datetime( 2019 , 10 , 3 ), datetime( 2019 , 10 , 4 ), datetime( 2019 , 10 , 5 ), datetime( 2019 , 10 , 6 ) ] ts = pd.Series(np.random.randn( 6 ), index = dates) ts # 2019-10-01 0.476832 # 2019-10-02 -0.185948 # 2019-10-03 1.267985 # 2019-10-04 0.748634 # 2019-10-05 -1.124271 # 2019-10-06 -1.769275 # dtype: float64 |
こうしてできたシリーズのdatetimeオブジェクトは、内部ではDateTimeIndexクラスに保持される。
1 2 3 4 | ts.index # DatetimeIndex(['2019-10-01', '2019-10-02', '2019-10-03', '2019-10-04', # '2019-10-05', '2019-10-06'], # dtype='datetime64[ns]', freq=None) |
また、別々にインデックス付けされた時系列での算術演算は、日付によって自動的に成形される。
以下の例は、元のシリーズに、偶数インデックス(0、2、4…)のシリーズを加算した例で、奇数インデックスの要素は足し合わせることができないため欠損値となっている。
1 2 3 4 5 6 7 8 | ts + ts[:: 2 ] # 2019-10-01 0.953664 # 2019-10-02 NaN # 2019-10-03 2.535971 # 2019-10-04 NaN # 2019-10-05 -2.248542 # 2019-10-06 NaN # dtype: float64 |
なお、DateTimeIndexのスカラー値は、pandasのタイムスタンプオブジェクトになっている。
1 2 3 4 | stamp = ts.index[ 0 ] stamp # Timestamp('2019-10-01 00:00:00') |