Pandas の DateOffset オブジェクトは、日付と時刻データを扱う際に時間オフセットを行うためのツールです。

以下は DateOffset の主な特徴と使い方です:

基本概念

DateOffset オブジェクトは Timedelta に似ていますが、カレンダー上の日時ルールに従うものであり、時間の性質に基づく算術計算を直接行うわけではありません。つまり、DateOffset は実際の暦日を考慮します。例えば、月や年をまたぐ日付を扱う場合、日数の差を正しく計算します。一方、Timedelta は指定された日数を単純に加算するだけで、月や年の変化を考慮しません。

使用方法

DateOffset は算術演算子(+ など)や apply メソッドを使って日付オフセット操作を実行できます。

例えば、次のように DateOffset を使って月や時間を増やすことができます:

実例

ts = pd.Timestamp('2017-01-01 09:10:11')
ts + DateOffset(months=3)  # 3ヶ月を追加
ts + DateOffset(hours=2)   # 2時間を追加

パラメータを指定しない場合、DateOffset() はデフォルトで1暦日を追加します:

ts + DateOffset()  # 默认增加一天

サポートされているパラメータ

DateOffset はさまざまなパラメータをサポートしており、年、月、週、日、時、分、秒などの時間単位を追加または置換するよう指定できます。これらのパラメータは、オフセット値に追加するもの(years、months、weeks、days、hours、minutes、seconds など)と、オフセット値を置換するもの(year、month、day、weekday、hour、minute、second など)があります。

特殊メソッド

DateOffset には、日付を前後に直近の有効な日付へロールする rollforward() メソッドと rollback() メソッドもあります。例えば、営業日オフセット(BDay)を使用すると、週末をスキップして次の営業日に直接ロールします。

実例

friday = pd.Timestamp('2022-01-05')
two_business_days = 2 * pd.offsets.BDay()
friday + two_business_days  # 2営業日を追加すると、週末をスキップします

頻度文字列

DateOffset は頻度文字列またはオフセットエイリアスをサポートしており、freq パラメータとして渡すことができます。これらの頻度文字列は DateOffset オブジェクトとそのサブクラスを表し、日時インデックスの頻度を定義します。

DateOffset は、Pandas で時系列データを扱う際に非常に便利なツールであり、日付と時刻のオフセット操作を実際のカレンダールールに沿ったものにします。


よく使う関数

DateOffset コンストラクタ

クラス/メソッド 説明
pd.DateOffset(**kwargs) DateOffset オブジェクトを作成し、カスタム時間オフセットをサポートします。

よく使われる DateOffset サブクラス

类 説明
pd.offsets.Day() 日数のオフセットを表します。
pd.offsets.BDay() 営業日(週末を除く)のオフセットを表します。
pd.offsets.Hour() 時間のオフセットを表します。
pd.offsets.Minute() 分のオフセットを表します。
pd.offsets.Second() 秒のオフセットを表します。
pd.offsets.Milli() ミリ秒のオフセットを表します。
pd.offsets.Micro() マイクロ秒のオフセットを表します。
pd.offsets.MonthEnd() 月末のオフセットを表します。
pd.offsets.MonthBegin() 月初のオフセットを表します。
pd.offsets.YearEnd() 年末のオフセットを表します。
pd.offsets.YearBegin() 年初のオフセットを表します。
pd.offsets.QuarterEnd() 四半期末のオフセットを表します。
pd.offsets.QuarterBegin() 四半期初のオフセットを表します。
pd.offsets.Week() 週のオフセットを表します。
pd.offsets.WeekOfMonth() 月内の第何週かのオフセットを表します。

DateOffset プロパティ

プロパティ 説明
DateOffset.name DateOffset の名前を返します。
DateOffset.n オフセットの数量を返すか設定します。
DateOffset.normalize 時間を深夜0時に正規化するかどうかを返すか設定します。

DateOffset メソッド

メソッド 説明
DateOffset.apply(other) オフセットを別の日時オブジェクトに適用します。
DateOffset.rollforward(other) 日付を次のオフセットに前方ロールします。
DateOffset.rollback(other) 日付を前のオフセットに後方ロールします。
DateOffset.is_anchored() オフセットがアンカーされているか(つまり頻度が固定されているか)を確認します。
DateOffset.onOffset(date) 日付がオフセットと整列しているかを確認します。

実例

実例

import pandas as pd
from pandas.tseries.offsets import Day, BDay, MonthEnd

# DateOffset を作成
offset = Day(3)
print(offset)  # 出力 <3 * Days>

# DateOffset を適用
date = pd.Timestamp('2023-01-01')
new_date = date + offset
print(new_date)  # 出力 2023-01-04

# よく使われるサブクラスを使用
bday_offset = BDay(2)
new_bdate = date + bday_offset
print(new_bdate)  # 出力 2023-01-05(週末をスキップ)

# 月末オフセット
month_end_offset = MonthEnd()
new_month_end = date + month_end_offset
print(new_month_end)  # 出力 2023-01-31

詳細パラメータ説明

pd.DateOffset()

パラメータ 説明
years 年数のオフセット。
months 月数のオフセット。
weeks 週数のオフセット。
days 日数のオフセット。
hours 時間数のオフセット。
minutes 分数のオフセット。
seconds 秒数のオフセット。
milliseconds ミリ秒数のオフセット。
microseconds マイクロ秒数のオフセット。
nanoseconds ナノ秒数のオフセット。

pd.offsets.BDay()

パラメータ 説明
n オフセットの数量。デフォルトは 1。
normalize 時間を深夜0時に正規化するかどうか。デフォルトはFalse。

pd.offsets.MonthEnd()

パラメータ 説明
n オフセットの数量。デフォルトは 1。
normalize 時間を深夜0時に正規化するかどうか。デフォルトはFalse。

より詳細な情報が必要な場合は、以下を参照してください。Pandas 公式ドキュメント。

その他の拡張