Python 時系列分析 1,000本ノック
– ノック26: 時系列データの特定曜日の抽出 –

Python 時系列分析 1,000本ノック– ノック26: 時系列データの特定曜日の抽出 –

次の Python コードの出力はどれでしょうか?

Python コード:

import pandas as pd

dates = pd.date_range(
    '2023-01-01', 
    periods=10, 
    freq='D')
df = pd.DataFrame(
    {'A': range(10)}, 
    index=dates)
wednesdays = df[
    df.index.weekday == 2]

print(wednesdays)

 

回答の選択肢:

(A) すべての水曜日のデータ
(B) すべての月曜日のデータ
(C) すべての日曜日のデータ
(D) データフレームには何も表示されない

 

出力例:

            A
2023-01-04  3

 

正解:

(A)

 

解説:

このコードは、指定した期間の日付範囲でデータフレームを作成し、その中から特定の曜日(水曜日)の日付だけを抽出しています。

詳しく説明します。

‘2023-01-01’から始まる日単位の日付範囲を10期間生成します。

dates = pd.date_range(
    '2023-01-01', 
    periods=10, 
    freq='D')

 

datesに格納されているデータは次のようになっています。

DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04',
               '2023-01-05', '2023-01-06', '2023-01-07', '2023-01-08',
               '2023-01-09', '2023-01-10'],
              dtype='datetime64[ns]', freq='D')

 

生成した日付をインデックスに持つデータフレームを作成します。データフレームの列’A’には0~9までの範囲の整数が格納されています。

df = pd.DataFrame(
    {'A': range(10)}, 
    index=dates)

 

dfに格納されているデータは次のようになっています。

            A
2023-01-01  0
2023-01-02  1
2023-01-03  2
2023-01-04  3
2023-01-05  4
2023-01-06  5
2023-01-07  6
2023-01-08  7
2023-01-09  8
2023-01-10  9

 

データフレームのインデックス(日付)から曜日を取得し、それが2(Pythonでは月曜日が0、日曜日が6なので2は水曜日を表します)と等しい場合のみのデータを新たなデータフレーム`wednesdays`に格納します。

wednesdays = df[
    df.index.weekday == 2]

 

抽出した水曜日のデータを持つデータフレーム`wednesdays`を表示します。

print(wednesdays)

結果として、’2023-01-01’から始まる10日間のうちの水曜日の日付とその’A’列の値が表示されます。

            A
2023-01-04  3

Python 時系列分析 1,000本ノック– ノック27: 時系列データの四半期の変更 –