pandasで時系列を扱うオブジェクトは、タイムスタンプによってインデックス付けされたシリーズが基本となる。
この時、タイムスタンプはdatetimeオブジェクトや文字列が使われる。
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クラスに保持される。
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…)のシリーズを加算した例で、奇数インデックスの要素は足し合わせることができないため欠損値となっている。
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のタイムスタンプオブジェクトになっている。
stamp = ts.index[0]
stamp
# Timestamp('2019-10-01 00:00:00')