次の Python コードの出力はどれでしょうか?
Python コード:
import pandas as pd dates = pd.date_range( start='2023-01-01', end='2023-01-31', freq='D') df = pd.DataFrame( index=dates, columns=['A']) week = df[df.index.weekday > 4] print(week.index)
回答の選択肢:
(A) 1月の全日付
(B) 1月の平日の日付
(C) 1月の土日の日付
(D) 1月の金土日の日付
出力例:
DatetimeIndex(['2023-01-01', '2023-01-07', '2023-01-08', '2023-01-14', '2023-01-15', '2023-01-21', '2023-01-22', '2023-01-28', '2023-01-29'], dtype='datetime64[ns]', freq=None)
正解:
(C)
解説:
このコードは、指定した期間の日付範囲でデータフレームを作成し、その中から週末(土曜日と日曜日)の日付だけを抽出しています。
詳しく説明します。
2023年1月の全日付を生成します。ここで、頻度として指定している’D’は「日」を意味します。
dates = pd.date_range( start='2023-01-01', end='2023-01-31', 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', '2023-01-11', '2023-01-12', '2023-01-13', '2023-01-14', '2023-01-15', '2023-01-16', '2023-01-17', '2023-01-18', '2023-01-19', '2023-01-20', '2023-01-21', '2023-01-22', '2023-01-23', '2023-01-24', '2023-01-25', '2023-01-26', '2023-01-27', '2023-01-28', '2023-01-29', '2023-01-30', '2023-01-31'], dtype='datetime64[ns]', freq='D')
生成した日付をインデックスに持つ、1つの列’A’を持つデータフレームを作成します。
df = pd.DataFrame( index=dates, columns=['A'])
df
に格納されているデータは次のようになっています。
A 2023-01-01 NaN 2023-01-02 NaN 2023-01-03 NaN 2023-01-04 NaN 2023-01-05 NaN 2023-01-06 NaN 2023-01-07 NaN 2023-01-08 NaN 2023-01-09 NaN 2023-01-10 NaN 2023-01-11 NaN 2023-01-12 NaN 2023-01-13 NaN 2023-01-14 NaN 2023-01-15 NaN 2023-01-16 NaN 2023-01-17 NaN 2023-01-18 NaN 2023-01-19 NaN 2023-01-20 NaN 2023-01-21 NaN 2023-01-22 NaN 2023-01-23 NaN 2023-01-24 NaN 2023-01-25 NaN 2023-01-26 NaN 2023-01-27 NaN 2023-01-28 NaN 2023-01-29 NaN 2023-01-30 NaN 2023-01-31 NaN
データフレームのインデックス(日付)から曜日を取得し、それが4より大きい(Pythonでは月曜日が0、日曜日が6なので、これは土曜日と日曜日を表します)場合のみのデータを新たなデータフレーム`week`に格納します。
week = df[df.index.weekday > 4]
新たに作成した週末だけのデータを持つデータフレーム`week`のインデックス、つまり週末の日付を表示します。
print(week.index)
結果として、2023年1月の週末(土曜日と日曜日)の日付が表示されます。
DatetimeIndex(['2023-01-01', '2023-01-07', '2023-01-08', '2023-01-14', '2023-01-15', '2023-01-21', '2023-01-22', '2023-01-28', '2023-01-29'], dtype='datetime64[ns]', freq=None)