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 以降で非推奨となっているため、新しいコードを書く場合は使用しないでください。