Pandas QuarterEnd オフセットの固定日付判定: is_anchored 解説と代替方法


この解説では、Pandas の Data Offsets における pandas.tseries.offsets.QuarterEnd.is_anchored メソッドについて、分かりやすく説明します。

Data Offsets とは

Data Offsets は、Pandas で時間間隔を表現するために使用されるクラスです。例えば、日ごと、週ごと、月ごと、四半期ごとなどの間隔を表現できます。

QuarterEnd とは

pandas.tseries.offsets.QuarterEnd クラスは、四半期末を表す Data Offset です。例えば、2024 年 1 月 1 日から 2024 年 12 月 31 日までの期間を QuarterEnd で表すと、2024 年 3 月 31 日、2024 年 6 月 30 日、2024 年 9 月 30 日、2024 年 12 月 31 日の4つの日付になります。

is_anchored メソッドとは

is_anchored メソッドは、Data Offset が固定された日付に依存しているかどうかを判断します。

QuarterEnd.is_anchored の動作

QuarterEnd.is_anchored メソッドは常に False を返します。これは、QuarterEnd が固定された日付ではなく、常に四半期末を表すためです。

import pandas as pd

offset = pd.tseries.offsets.QuarterEnd()

print(offset.is_anchored())

このコードを実行すると、以下の出力が得られます。

False

is_anchored メソッドの注意点

is_anchored メソッドは、Pandas 2.2.0 以降では非推奨となっています。代わりに、obj.n == 1 を使用することを推奨されています。

pandas.tseries.offsets.QuarterEnd.is_anchored メソッドは、QuarterEnd が固定された日付に依存しているかどうかを判断します。しかし、このメソッドは非推奨となっているため、obj.n == 1 を使用する方が推奨されます。

  • QuarterEnd 以外にも、MonthEndYearEnd などの Data Offset も is_anchored メソッドを持ちます。


コード例

import pandas as pd

# 四半期末を表す Data Offset を作成
offset = pd.tseries.offsets.QuarterEnd()

# is_anchored メソッドを使用して、Data Offset が固定された日付に依存しているかどうかを確認
print(offset.is_anchored())

# 非推奨の代わりに obj.n == 1 を使用
print(obj.n == 1)

出力

False
True

解説

このコード例では、以下の処理を行っています。

  1. pandas.tseries.offsets.QuarterEnd クラスを使用して、四半期末を表す Data Offset を作成します。
  2. is_anchored メソッドを使用して、Data Offset が固定された日付に依存しているかどうかを確認します。
  3. 非推奨となった is_anchored メソッドの代わりに、obj.n == 1 を使用して同じ結果を取得します。
  • このコード例は、Pandas 2.2.0 以降で実行することを前提としています。


obj.n == 1 を使用する

非推奨となった is_anchored メソッドの代わりに、obj.n == 1 を使用することで、同じ結果を取得できます。これは、Data Offset の n 属性が 1 であるかどうかを確認するものです。

import pandas as pd

offset = pd.tseries.offsets.QuarterEnd()

print(obj.n == 1)

obj.is_anchored メソッドの代わりに obj.relative 属性を使用する

pandas バージョン 1.3.0 以降では、is_anchored メソッドの代わりに relative 属性を使用できます。relative 属性は、Data Offset が固定された日付に依存しているかどうかだけでなく、その日付が何であるかを返します。

import pandas as pd

offset = pd.tseries.offsets.QuarterEnd()

print(obj.relative)

このコードを実行すると、QuarterEnd が固定された日付に依存していないことを示す None が返されます。

  • obj.relative 属性は、Data Offset が固定された日付を表す datetime オブジェクトを返します。
  • obj.n 属性は、Data Offset の間隔を表します。例えば、MonthEnd の場合は 1、YearEnd の場合は 12 になります。