はじめに
年次作業などでシステムのプロパティファイル(祝日の定義)などを更新するとき、祝日を簡単に取得できたらいいなと思いました。pandasを用いると簡単に取得できたので紹介します。
環境
- python 3.7.4
- Windows10
取得データ
データ取得
ダウンロード後、カラム名を変更。
import pandas as pd
url = "https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv"
df = pd.read_csv(url, encoding="SHIFT-JIS")
df = df.rename(
columns={
"国民の祝日・休日月日": "national_holiday_ymd",
"国民の祝日・休日名称": "national_holiday_name",
}
)
データ整形
df["national_holiday_ymd"] = pd.to_datetime(
df["national_holiday_ymd"], format="%Y-%m-%d"
)
# year(年度)カラムを追加
df.loc[df["national_holiday_ymd"].dt.month >= 4, "year"] = df[
"national_holiday_ymd"
].dt.year
df.loc[df["national_holiday_ymd"].dt.month < 4, "year"] = (
df["national_holiday_ymd"].dt.year - 1
)
# yearカラムをfloat型からint型に変換
df["year"] = df["year"].astype(int)
# stringに変換
df["month"] = df["national_holiday_ymd"].dt.month.astype(str)
df["day"] = df["national_holiday_ymd"].dt.day.astype(str)
# m/dの形にする
df["date"] = df["month"].str.cat(df["day"], sep="/")
2022年度のデータに絞り日付を出力
# 2022年度を抽出
# 最後のデータは','は不要なので分岐させています。
df_tmp = df.query("year == 2022").reset_index()
# 日付のみを1行で出力
for index, item in df_tmp.iterrows():
if index == len(df_tmp["date"]) - 1:
print("'" + item["date"] + "'", end="")
else:
print("'" + item["date"] + "'" + ",", end="")
出力結果は下記。
'4/29','5/3','5/4','5/5','7/18','8/11','9/19','9/23','10/10','11/3','11/23','1/1','1/2','1/9','2/11','2/23','3/21
参考ページ
https://qiita.com/toshikawa/items/2d535906b42b9332b743
https://tamiz-blog.com/programming/pandas/pandas20210221/