🎉

Python 日本の祝日と土曜日・日曜日の日付一覧を取得する

2024/02/23に公開

はじめに

Pythonで日本の祝日と土曜日・日曜日の日付一覧を取得するコードを書いてみました。
注意:祝日の日付はholidaysというライブラリを使用して取得しているため、その結果は正確ではない可能性があります。

環境

・Google Colaboratory

コード

# 作成したい年度を入力してください。
year = 2024
import pandas as pd
import numpy as np
import datetime
import holidays

今回の要となるのが、holidaysという祝日を取得するライブラリです。

# year年の日本の祝日を取得
jp_holidays = holidays.CountryHoliday('JP', years=year)

# year年の土曜日と日曜日の日付を取得
start = str(year) + '-01-01'
end = str(year) + '-12-31'
weekend_dates = pd.date_range(start, end, freq='W-SAT') | \
               pd.date_range(start, end, freq='W-SUN')

# 祝日と土日の日付を結合
dns = list(jp_holidays.keys()) + list(weekend_dates)

# データフレームを作成
df = pd.DataFrame({'date': dns}).drop_duplicates().sort_values('date').reset_index()
df.drop('index', axis=1, inplace=True)

データフレームを作成している部分では、祝日のリストと土日のリストを結合した際に被る日付があるため、.drop_duplicates()で一方を削除しています。また、採番がおかしくなるので、.reset_index()しました。この時に余計な列'index'ができてしまったので削除しています。

# フラグ変数の作成
df['is_holidays'] = np.where(df['date'].isin(list(jp_holidays.keys())), 1, 0)
df['is_sat'] = np.where(df['date'].isin(list(pd.date_range(start, end, freq='W-SAT'))), 1, 0)
df['is_sun'] = np.where(df['date'].isin(list(pd.date_range(start, end, freq='W-SUN'))), 1, 0)

# 日付のフォーマット変換(2020-01-01 -> 2020/1/1)
df['date'] = df['date'].dt.strftime('%Y/%-m/%-d')

# 結果を表示
display(df.head(10))

Discussion