次の Python コードの出力はどれでしょうか?
Python コード:
import pandas as pd import numpy as np np.random.seed(6) dates = pd.date_range( '2023-01-01', periods=4, freq='D') df = pd.DataFrame( np.random.randn(4, 1), index=dates, columns=['A']) print(df.shift(2))
回答の選択肢:
(A) 2日後の値が表示される
(B) 各日のランダムな値
(C) 2日前の値が表示される
(D) すべてNaN
出力例:
A 2023-01-01 NaN 2023-01-02 NaN 2023-01-03 -0.311784 2023-01-04 0.729004
正解:
(C)
解説:
このコードは、ランダムな値を含む時系列データフレームを作成し、そしてそのデータを2つの時間単位でシフト(前に移動)、つまり各行の値は2日後の行に移動しています。
詳しく説明します。
まず、’2023-01-01’から始まる日付範囲を4期間作成します。’D’は「日」を意味するので、ここでは1日ごとの日付範囲を作成します。
dates = pd.date_range( '2023-01-01', periods=4, freq='D')
dates
に格納されているデータは次のようになっています。
DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04'], dtype='datetime64[ns]', freq='D')
次に、この日付範囲をインデックスとする4行1列のランダムな値でデータフレームを作成します。このデータフレームの列名は ‘A’ となっています。
df = pd.DataFrame( np.random.randn(4, 1), index=dates, columns=['A'])
例えば、df
に格納されているデータは次のようになっています。ランダムな値を入れているため、人によって値は異なります。
A 2023-01-01 -0.311784 2023-01-02 0.729004 2023-01-03 0.217821 2023-01-04 -0.899092
最後に、データフレームの`shift`メソッドを使用して、データを2日分シフト(前に移動)つまり各行の値は2日後の行に移動します。シフト操作により、初めの2行はNaN(値がない)となり、その他の行は原来のデータが2日前の日付に対応します。
print(df.shift(2))
出力として、シフトされたデータフレームが表示されます。これは、各データが2日分前に移動した結果(各行の値は2日後の行に移動)を示しています。
A 2023-01-01 NaN 2023-01-02 NaN 2023-01-03 -0.311784 2023-01-04 0.729004