Pandasで時間軸データを操作: Hour クラスで時間単位のオフセットを生成・操作


pandas.tseries.offsets.Hour は、Pandas データフレームにおける時刻データの操作に役立つオフセットクラスの一つです。このクラスは、時間単位でデータポイントをシフトする機能を提供します。

freqstr メソッドは、Hour オフセットの周波数を文字列形式で表現するために使用されます。これは、データの可視化や分析において、オフセットの設定を明確に伝えるために役立ちます。

使い方

freqstr メソッドは、Hour オフセットオブジェクトに対して呼び出すことができます。引数として、オプションで単位を指定することができます。

import pandas as pd

# 時間オフセットを作成
hour_offset = pd.tseries.offsets.Hour(n=2)

# 周波数を文字列形式で取得
freq_str = hour_offset.freqstr()
print(freq_str)  # 出力: '2H'

# 単位を指定して周波数を取得
freq_str_with_unit = hour_offset.freqstr(unit='H')
print(freq_str_with_unit)  # 出力: '2 hours'

以下の例では、Hour オフセットを使用して、データフレームのインデックスを2時間ごとにシフトする方法を示します。

import pandas as pd

# データフレームを作成
data = {'timestamp': pd.date_range('2024-01-01', '2024-01-05'), 'value': range(10)}
df = pd.DataFrame(data)

# 2時間ごとにデータポイントをシフト
df_shifted = df.set_index('timestamp').resample('2H').asfreq('T')

# シフトされたデータフレームを表示
print(df_shifted)

出力

                value
timestamp                         
2024-01-01 00:00:00    0
2024-01-01 02:00:00    1
2024-01-01 04:00:00    2
2024-01-01 06:00:00    3
2024-01-01 08:00:00    4
2024-01-01 10:00:00    5
2024-01-01 12:00:00    6
2024-01-01 14:00:00    7
2024-01-01 16:00:00    8
2024-01-01 18:00:00    9

pandas.tseries.offsets.Hour.freqstr メソッドは、Hour オフセットの周波数を文字列形式で表現し、データ分析における可視化や理解を促進します。このメソッドを活用することで、時間軸データの操作をより明確かつ効率的に行うことができます。

  • 他の時間オフセットクラス (e.g., Day, Minute) にも同様の freqstr メソッドが用意されています。
  • freqstr メソッドは、pandas 0.24.0以降で使用可能です。


異なる時間単位での周波数文字列取得

import pandas as pd

hour_offset = pd.tseries.offsets.Hour(n=3)

# 日単位で周波数を取得
day_freq_str = hour_offset.freqstr(unit='D')
print(day_freq_str)  # 出力: '0.125D'

# 週単位で周波数を取得
week_freq_str = hour_offset.freqstr(unit='W')
print(week_freq_str)  # 出力: '0.01785714285714285D'

カスタムフォーマット指定

freqstr メソッドは、format 引数を使用して、カスタムフォーマットを指定することができます。以下のコードは、オフセットの周波数を時間と分で表現する方法を示します。

import pandas as pd

hour_offset = pd.tseries.offsets.Hour(n=2)

# 時間と分で周波数を取得
custom_freq_str = hour_offset.freqstr(format='%H:%M')
print(custom_freq_str)  # 出力: '02:00'

freqstr メソッドは、複数のオフセットを組み合わせた周波数を文字列形式で取得することができます。以下のコードは、Hour オフセットと Minute オフセットを組み合わせた周波数を取得する方法を示します。

import pandas as pd

hour_offset = pd.tseries.offsets.Hour(n=1)
minute_offset = pd.tseries.offsets.Minute(n=30)

combined_offset = hour_offset + minute_offset

# 組み合わせた周波数を取得
combined_freq_str = combined_offset.freqstr()
print(combined_freq_str)  # 出力: '1H30T'


オフセット生成

  • n: オフセットの時間数を指定します。デフォルトは1です。
hour_offset = pd.tseries.offsets.Hour(n=3)  # 3時間オフセットを作成
  • start: オフセットの開始時刻を指定します。デフォルトはNoneです。
start_time = pd.Timestamp('2024-05-25 10:00:00')
hour_offset_with_start = pd.tseries.offsets.Hour(n=2, start=start_time)

オフセット操作

  • +: オフセット同士を加算します。
hour_offset1 = pd.tseries.offsets.Hour(n=2)
hour_offset2 = pd.tseries.offsets.Hour(n=3)
combined_offset = hour_offset1 + hour_offset2  # 5時間オフセットになる
  • -: オフセット同士を減算します。
combined_offset = hour_offset1 - hour_offset2  # -1時間オフセットになる
  • *: オフセットを倍数にします。
doubled_offset = hour_offset1 * 2  # 4時間オフセットになる

比較

  • ==: オフセット同士を等価比較します。
offset1 = pd.tseries.offsets.Hour(n=2)
offset2 = pd.tseries.offsets.Hour(n=2)
are_equal = offset1 == offset2  # True を返す
  • !=: オフセット同士を非等価比較します。
offset3 = pd.tseries.offsets.Hour(n=3)
are_different = offset1 != offset3  # True を返す
  • is_on_offset: 特定の日付がオフセットに対して一致するかどうかを確認します。
date = pd.Timestamp('2024-05-25 12:00:00')
is_on_two_hour_offset = hour_offset2.is_on_offset(date)  # True を返す
  • apply: オフセットを関数に適用します。
def multiply_by_3(n):
  return n * 3

tripled_offset = hour_offset.apply(multiply_by_3)  # 6時間オフセットになる

これらの機能を活用することで、Hour オブジェクトをより柔軟かつ効率的に操作することができます。

  • Pandas データオフセットは、時間軸データの操作を簡素化し、より直感的なコードを書くのに役立ちます。