Pandas Series.at_time() 関数で時系列データから必要な情報を効率的に抽出


pandas.Series.at_time() 関数は、Pandas Series オブジェクトから特定の時刻の値を抽出するために使用されます。例えば、株価データの時系列データから、午前9時30分の株価を抽出したい場合などに役立ちます。

構文

Series.at_time(time, asof=None, axis=None)

パラメータ

  • axis: 軸番号。デフォルトは None で、この場合、行方向のインデックスが使用されます。
  • asof: 参照する時刻。datetime.time オブジェクトまたは文字列形式で指定できます。デフォルトは None で、この場合、time で指定された時刻が使用されます。
  • time: 抽出したい時刻。datetime.time オブジェクトまたは文字列形式で指定できます。

戻り値

指定された時刻の値を返します。値が存在しない場合は NaN を返します。

import pandas as pd

# 時系列データを作成
data = {'2024-06-13 09:30:00': 100, '2024-06-13 10:30:00': 120, '2024-06-13 11:30:00': 115}
series = pd.Series(data, index=pd.to_datetime(data.keys()))

# 午前9時30分の値を抽出
value = series.at_time('09:30:00')
print(value)  # 100

# 午前10時30分の値を、午前9時30分を基準として抽出
value = series.at_time('10:30:00', asof='09:30:00')
print(value)  # 120
  • asof パラメータを使用して、異なる時刻を基準とした値の抽出も可能です。
  • 時刻を文字列形式で指定する場合は、フォーマットが正しいことを確認してください。
  • at_time() 関数は、インデックスが DatetimeIndex である Series オブジェクトでのみ使用できます。


例1:株価データから特定の時刻の株価を抽出

この例では、株価データの時系列データから、午前9時30分と午後1時00分の株価を抽出します。

import pandas as pd

# 株価データを作成
data = {'2024-06-13 09:00:00': 105, '2024-06-13 09:30:00': 100, '2024-06-13 10:30:00': 120, '2024-06-13 12:30:00': 125, '2024-06-13 13:00:00': 130}
index = pd.to_datetime(data.keys())
series = pd.Series(data, index=index)

# 午前9時30分の株価を抽出
morning_value = series.at_time('09:30:00')
print(morning_value)  # 100

# 午後1時00分の株価を抽出
afternoon_value = series.at_time('13:00:00')
print(afternoon_value)  # 130

例2:為替レートデータから特定の時刻の為替レートを抽出

この例では、為替レートデータの時系列データから、午前9時00分のユーロ/ドルの為替レートを抽出します。

import pandas as pd

# 為替レートデータを作成
data = {'USD/JPY': [135.0, 135.2, 134.9, 135.1, 135.2], 'EUR/USD': [1.1234, 1.1245, 1.1225, 1.1250, 1.1238], 'GBP/USD': [1.3050, 1.3075, 1.3020, 1.3060, 1.3045]}
index = pd.to_datetime(['2024-06-10', '2024-06-11', '2024-06-12', '2024-06-13', '2024-06-14'])
df = pd.DataFrame(data, index=index)

# 午前9時00分のEUR/USDの為替レートを抽出
eur_usd_rate = df['EUR/USD'].at_time('09:00:00')
print(eur_usd_rate)  # 1.1234

例3:異なる時刻を基準とした値の抽出

この例では、株価データの時系列データから、午前10時30分の値を、午前9時30分を基準として抽出します。

import pandas as pd

# 株価データを作成
data = {'2024-06-13 09:30:00': 100, '2024-06-13 10:30:00': 120, '2024-06-13 11:30:00': 115}
index = pd.to_datetime(data.keys())
series = pd.Series(data, index=index)

# 午前10時30分の値を、午前9時30分を基準として抽出
value = series.at_time('10:30:00', asof='09:30:00')
print(value)  # 120

これらの例は、pandas.Series.at_time() 関数の基本的な使い方を示しています。この関数を使用して、様々な時系列データから必要な情報を効率的に抽出することができます。

  • データフレームに複数の列がある場合は、列名を指定
  • 上記の例では、to_datetime() 関数を使用して文字列形式の日付時刻を DatetimeIndex オブジェクトに変換しています。


.loc インデクサ

最も一般的な代替方法は、.loc インデクサを使用する方法です。loc インデクサは、行と列のラベルに基づいてデータフレームまたはシリーズの要素にアクセスするための強力なツールです。at_time 関数と同様に、loc インデクサを使用して特定の時刻の値を抽出することができます。

import pandas as pd

# 例:株価データから午前9時30分の株価を抽出

data = {'2024-06-13 09:00:00': 105, '2024-06-13 09:30:00': 100, '2024-06-13 10:30:00': 120, '2024-06-13 12:30:00': 125, '2024-06-13 13:00:00': 130}
index = pd.to_datetime(data.keys())
series = pd.Series(data, index=index)

# 午前9時30分の株価を抽出
value = series.loc['2024-06-13 09:30:00']
print(value)  # 100

利点

  • 複雑な条件に基づいて値を抽出する場合に役立ちます。
  • .loc インデクサは、より汎用性が高く、行と列のラベルに基づいてデータにアクセスするために使用できます。

欠点

  • at_time 関数よりも若干読みづらく、理解しにくい場合があります。

.getitem メソッド

もう1つの代替方法は、.getitem メソッドを使用する方法です。getitem メソッドは、リストや配列などのコレクション型から要素にアクセスするために使用されます。at_time 関数と同様に、getitem メソッドを使用して特定の時刻の値を抽出することができます。

import pandas as pd

# 例:株価データから午前9時30分の株価を抽出

data = {'2024-06-13 09:00:00': 105, '2024-06-13 09:30:00': 100, '2024-06-13 10:30:00': 120, '2024-06-13 12:30:00': 125, '2024-06-13 13:00:00': 130}
index = pd.to_datetime(data.keys())
series = pd.Series(data, index=index)

# 午前9時30分の株価を抽出
value = series['2024-06-13 09:30:00']
print(value)  # 100

利点

  • シンプルで分かりやすい構文です。

欠点

  • 複雑な条件に基づいて値を抽出する場合には使用できません。
  • .loc インデクサほど汎用性が高くありません。

iRow 属性

古いバージョンの Pandas では、iRow 属性を使用して特定の時刻の値を抽出することができました。しかし、この方法は非推奨となり、Pandas 0.24 以降では動作しなくなりました。

  • 既存のコードで iRow 属性を使用している場合は、loc インデクサまたは getitem メソッドに置き換える必要があります。
  • iRow 属性は Pandas 0.24 以降で非推奨となっているため、新しいコードを書く場合は使用しないでください。