Pandas Data offsets と CustomBusinessDay.calendar を徹底解説

2024-04-02

pandasのData offsetsとCustomBusinessDay.calendar

CustomBusinessDay は、BusinessDay オフセットを拡張したもので、祝日や週末を除いてビジネス日のみを進めることができます。さらに、calendar 属性を使って、特定の地域や機関の祝日カレンダーを指定することができます。

CustomBusinessDay.calendar の使い方を、具体的な例を通して説明します。

例:日本の祝日カレンダーを使って、2023年1月1日から5営業日後の日付を求める

import pandas as pd

# 日本の祝日カレンダーを定義
holidays = pd.tseries.holiday.JapaneseHolidayCalendar()

# CustomBusinessDayオフセットを作成
bday_offset = pd.offsets.CustomBusinessDay(calendar=holidays)

# 2023年1月1日から5営業日後の日付を取得
start_date = pd.to_datetime('2023-01-01')
next_date = start_date + bday_offset * 5

# 結果を出力
print(next_date)

出力:

2023-01-11

この例では、日本の祝日カレンダーを使って、2023年1月1日から5営業日後の日付が2023年1月11であることを確認しています。

CustomBusinessDay.calendar 属性を使って、様々な祝日カレンダーを指定することができます。

  • USFederalHolidayCalendar: 米国の祝日カレンダー
  • NYSEHolidayCalendar: ニューヨーク証券取引所の祝日カレンダー
  • XNASHolidayCalendar: ナスダック証券取引所の祝日カレンダー

その他、CustomBusinessDay には、以下のオプションがあります。

  • weekmask: 曜日を指定するマスク
  • holidays: 特定の日付を祝日として指定するリスト
  • observance: 祝日の振替休日に関する設定

詳細は、Pandasのドキュメントを参照してください。



CustomBusinessDay.calendar を使ったサンプルコード

祝日カレンダーを利用したサンプル

日本の祝日カレンダーを使って、2023年1月1日から3営業日後の日付を求める

import pandas as pd

# 日本の祝日カレンダーを定義
holidays = pd.tseries.holiday.JapaneseHolidayCalendar()

# CustomBusinessDayオフセットを作成
bday_offset = pd.offsets.CustomBusinessDay(calendar=holidays)

# 2023年1月1日から3営業日後の日付を取得
start_date = pd.to_datetime('2023-01-01')
next_date = start_date + bday_offset * 3

# 結果を出力
print(next_date)
2023-01-04

米国の祝日カレンダーを使って、2023年1月16日から2営業日前の日付を求める

import pandas as pd

# 米国の祝日カレンダーを定義
holidays = pd.tseries.holiday.USFederalHolidayCalendar()

# CustomBusinessDayオフセットを作成
bday_offset = pd.offsets.CustomBusinessDay(calendar=holidays)

# 2023年1月16日から2営業日前の日付を取得
start_date = pd.to_datetime('2023-01-16')
prev_date = start_date - bday_offset * 2

# 結果を出力
print(prev_date)

出力:

2023-01-13

特定の日付を祝日として指定するサンプル

2023年1月20日を祝日として、2023年1月19日から4営業日後の日付を求める

import pandas as pd

# 2023年1月20日を祝日として指定
holidays = [pd.to_datetime('2023-01-20')]

# CustomBusinessDayオフセットを作成
bday_offset = pd.offsets.CustomBusinessDay(holidays=holidays)

# 2023年1月19日から4営業日後の日付を取得
start_date = pd.to_datetime('2023-01-19')
next_date = start_date + bday_offset * 4

# 結果を出力
print(next_date)

出力:

2023-01-25

曜日を指定するサンプル

月曜日から金曜日までの営業日だけを進めるCustomBusinessDayオフセットを作成

import pandas as pd

# 月曜日から金曜日までの営業日だけを進めるマスクを定義
weekmask = 'Mon Tue Wed Thu Fri'

# CustomBusinessDayオフセットを作成
bday_offset = pd.offsets.CustomBusinessDay(weekmask=weekmask)

# 2023年1月29日(日曜日)から3営業日後の日付を取得
start_date = pd.to_datetime('2023-01-29')
next_date = start_date + bday_offset * 3

# 結果を出力
print(next_date)

出力:

2023-02-02

上記のサンプルコードは、CustomBusinessDay.calendar 属性の様々な使い方を示しています。

これらのサンプルコードを参考に、ご自身のニーズに合わせたCustomBusinessDayオフセットを作成してみてください。



祝日を除いて日付を進める他の方法

forループを使う

import pandas as pd

# 日本の祝日カレンダーを定義
holidays = pd.tseries.holiday.JapaneseHolidayCalendar()

# 2023年1月1日から5営業日後の日付を求める
start_date = pd.to_datetime('2023-01-01')
next_date = start_date

# 祝日を除いて5営業日進める
for _ in range(5):
    next_date += pd.offsets.Day()
    while next_date in holidays:
        next_date += pd.offsets.Day()

# 結果を出力
print(next_date)

出力:

2023-01-11

apply()を使う

import pandas as pd

# 日本の祝日カレンダーを定義
holidays = pd.tseries.holiday.JapaneseHolidayCalendar()

# 2023年1月1日から5営業日後の日付を求める
start_date = pd.to_datetime('2023-01-01')

# 営業日かどうかを判定する関数
def is_businessday(date):
    return date not in holidays

# 5営業日後の日付を取得
next_date = start_date + pd.offsets.DateOffset(days=5)

# 祝日の場合は、次の営業日まで進める
while not is_businessday(next_date):
    next_date += pd.offsets.Day()

# 結果を出力
print(next_date)

出力:

2023-01-11

pandas-market-calendars ライブラリを使う

import pandas as pd
from pandas_market_calendars import MarketCalendar

# 日本の祝日カレンダーを定義
calendar = MarketCalendar('JPX')

# 2023年1月1日から5営業日後の日付を求める
start_date = pd.to_datetime('2023-01-01')

# 5営業日後の日付を取得
next_date = calendar.advance_date(start_date, 5, 'businessday')

# 結果を出力
print(next_date)

出力:

2023-01-11
  • forループを使う方法: シンプルでわかりやすい方法です。ただし、処理速度が遅くなる可能性があります。
  • apply()を使う方法: forループを使う方法よりも処理速度が速くなります。ただし、コードが少し複雑になります。
  • pandas-market-calendars ライブラリを使う: 複数の祝日カレンダーに対応しており、コードもシンプルです。ただし、ライブラリのインストールが必要です。



Pandasで四半期分析を行うための基礎: QuarterBegin オブジェクトの使い方

pandas. tseries. offsets. QuarterBegin. rollback は、指定された日付を、四半期の開始日に巻き戻す関数です。四半期開始日は、デフォルトでは 3 月 1 日、6 月 1 日、9 月 1 日、12 月 1 日です。



Pandas: Data Offsets - CustomBusinessHour.rollforward のサンプルコード集

CustomBusinessHour は、祝日や営業時間などを考慮したオフセットを設定するためのクラスです。rollforward メソッドは、指定された時刻を次の営業日に進めるためのメソッドです。出力解説サンプルコードでは、まず祝日と営業時間を設定しています。


Pandasでイースターの日付を自在に操る! 5つの強力なサンプルコード

pandas. tseries. offsets. Easter は、イースターの日付を取得するための DateOffset です。DateOffset は、Pandas で日付を操作するための便利なツールであり、特定の期間や規則に基づいて日付を移動することができます。


PandasのData OffsetsとFY5253.freqstr

Pandas の tseries. offsets モジュールは、日付や時間ベースのデータ分析に必要なオフセットを提供します。オフセットは、特定の日付や時間から一定期間前後の日付や時間を算出するために使用されます。FY5253. freqstr


Pandasで特定の曜日に設定された月の週を操作する: pandas.tseries.offsets.WeekOfMonth.onOffset を使いこなす

pandas. tseries. offsets. WeekOfMonth は、特定の曜日に設定された月の週を表すオフセットです。onOffset メソッドは、このオフセットを使用して、指定された曜日の月の週に一致する日付を計算するために使用されます。



PandasのData OffsetsとQuarterEnd.rollforward

このチュートリアルでは、pandas. tseries. offsets. QuarterEnd. rollforward メソッドについて詳しく説明します。このメソッドは、指定された日付から次の四半期末までの期間を計算します。このコードを実行すると、以下の出力が得られます。


Pandas Series.reindex_like とは?

pandas. Series. reindex_like メソッドは、別の Series や DataFrame のインデックスに一致するように、対象の Series のインデックスを調整します。使い方出力説明s1 は 'A', 'B', 'C' というインデックスを持つ Series です。


pandas.read_sas vs その他の方法

引数filepath: 読み込む SAS データファイルのパスformat: SAS データファイルのフォーマット 'xport': XPORT フォーマット 'sas7bdat': SAS 7BDAT フォーマット'xport': XPORT フォーマット


PandasのFY5253Quarter.is_year_start:52-53週会計年度の開始日を判定

pandas. tseries. offsets. FY5253Quarter. is_year_start は、pandas ライブラリの tseries. offsets モジュールにある関数です。この関数は、指定された日付が52-53週の会計年度の最初の四半期かどうかを判断します。


Pandas Series拡張機能: pandas.api.extensions.register_series_accessor の詳細解説

pandas. api. extensions. register_series_accessor は、PandasのSeriesオブジェクトにカスタムアクセサメソッドを登録するためのデコレータです。このデコレータを用いることで、Pandasの標準APIにはない、独自のデータ操作や分析機能をSeriesオブジェクトに追加することができます。