Pythonで開始日と終了日の範囲から合計営業日数を計算する関数の作成方法
データ分析や業務システムの開発では、開始日と終了日の間に含まれる「営業日(平日)」の日数を求めたい場面がよくあります。Pythonのpandasライブラリを使えば、この処理を簡単に実装できます。
本記事では、pd.bdate_range()を活用して、指定した期間内の合計営業日数を計算するPython関数を2つの方法で紹介します。
期待する出力結果
まず、2020年1月1日から2020年2月2日までの期間に対して営業日を抽出すると、以下のような結果が得られます。土曜日と日曜日は自動的に除外されている点に注目してください。
Dates are:
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-06',
'2020-01-07', '2020-01-08', '2020-01-09', '2020-01-10',
'2020-01-13', '2020-01-14', '2020-01-15', '2020-01-16',
'2020-01-17', '2020-01-20', '2020-01-21', '2020-01-22',
'2020-01-23', '2020-01-24', '2020-01-27', '2020-01-28',
'2020-01-29', '2020-01-30', '2020-01-31'],
dtype='datetime64[ns]', freq='B')
Total number of days: 23方法1:len()関数を使うシンプルな実装
最もシンプルな方法は、生成した営業日のインデックスに対してlen()を適用することです。
手順
- 営業日数を計算するための関数
business_days()を定義します。 pd.bdate_range()の引数に開始日'2020-01-01'と終了日'2020-02-02'を指定し、結果を変数datesに保存します。len(dates)で営業日の総数を取得します。
dates = pd.bdate_range('2020-01-01','2020-02-02')len(dates)
サンプルコード
実際のコードは以下の通りです。
import pandas as pd
def business_days():
dates = pd.bdate_range('2020-01-01','2020-02-02')
print("Total number of days:", len(dates))
business_days()出力結果
Total number of days: 23
方法2:forループでカウントする実装
次に、ループ処理を使って営業日を1件ずつ数える方法を紹介します。Pythonの基礎的な繰り返し処理の学習にも役立ちます。
手順
- 同様に関数を定義し、
pd.bdate_range()で営業日のリストを作成します。 - カウンター変数
countを 0 で初期化します。 - forループで
datesの各要素にアクセスし、そのたびにcountを1ずつ加算します。 - 最後に
countの値を出力します。
count = 0
for i in dates:
count = count + 1サンプルコード
import pandas as pd
def business_days():
dates = pd.bdate_range('2020-01-01','2020-02-02')
count = 0
for i in dates:
count = count + 1
print("Total number of days:", count)
business_days()出力結果
Total number of days: 23
まとめ
pandasのbdate_range()は、デフォルトで月曜日から金曜日までの営業日のみを生成してくれる便利な関数です。単純に日数を知りたい場合はlen()を使う方法1が効率的ですが、各日付に対して個別の処理を行いたい場合は方法2のようなループ構文が応用できます。
なお、日本の祝日などを除外したい場合は、pandasのCustomBusinessDayクラスやjpholidayなどのライブラリと組み合わせることで、より実用的な営業日計算が可能になります。
-
Pythonで2つの日付の間の日数を計算する方法を解説
Pythonでは、シンプルな日付演算を使うことで、2つの日付の間の日数を簡単に計算できます。日数の差を求めたい2つの日付を定義し、それらを引き算すると timedelta オブジェクトが得られます。このオブジェクトの days プロパティを参照することで、目的の日数を取得できます。基本的な手順datetime モジュールから date クラスをインポートします。差を求めたい2つの日付を date オブジェクトとして定義します。2つの日付を引き算して timedelta オブジェクトを生成します。days プロパティの値を出力します。サンプルコードfrom datetime import dat
-
Pythonの正規表現で特定の文字から始まり、特定の文字で終わる部分をマッチさせる方法
文字列「TestCountry Hello」が与えられているとします。この文字列のうち、「T」で始まり「y」で終わる部分を抽出して表示するには、reモジュールのfindallメソッドを使用します。正規表現パターンには、単語境界のアンカー「\b」と、空白以外の任意の文字を表す「\S」を組み合わせます。 コード例 import re result = re.findall(r\bT\S+y\b, TestCountry Hello) print(result) 実行結果 上記のコードを実行すると、次の出力が得られます。 [TestCountry] パターンの解説 使用した正規表現パターン「\bT\