Series.at_time vs loc vs iloc:パフォーマンス比較と使い分け

2024-04-02

pandas.Series.at_time は、pandas.Series オブジェクトから特定の時刻の値を取得するために使用されます。

引数

  • time: 取得したい時刻を表す文字列または datetime.time オブジェクト

戻り値

  • 指定された時刻の値

import pandas as pd

# データフレームの作成
df = pd.DataFrame({'time': ['09:00', '10:00', '11:00', '12:00'], 'value': [10, 20, 30, 40]})

# Seriesオブジェクトの作成
s = df['value']

# 特定の時刻の値を取得
value_at_10am = s.at_time('10:00')

# 結果の出力
print(value_at_10am)

出力

20

詳細

  • at_time メソッドは、Series オブジェクトのインデックスに時刻が含まれていることを前提としています。
  • 時刻がインデックスに存在しない場合は、KeyError 例外が発生します。
  • asof=False オプションを指定すると、インデックスに存在しない時刻の場合でも、最も近い値を返します。


pandas.Series.at_time のサンプルコード

import pandas as pd

# データフレームの作成
df = pd.DataFrame({'time': ['09:00', '10:00', '11:00', '12:00'], 'value1': [10, 20, 30, 40], 'value2': [50, 60, 70, 80]})

# 特定の時刻の値を取得
value1_at_10am = df['value1'].at_time('10:00')
value2_at_10am = df['value2'].at_time('10:00')

# 結果の出力
print(value1_at_10am, value2_at_10am)

出力

20 60

datetime.time オブジェクトを使用して値を取得

from datetime import time

# データフレームの作成
df = pd.DataFrame({'time': ['09:00', '10:00', '11:00', '12:00'], 'value': [10, 20, 30, 40]})

# 特定の時刻の値を取得
time_obj = time(hour=10, minute=0)
value_at_10am = df['value'].at_time(time_obj)

# 結果の出力
print(value_at_10am)

出力

20

インデックスに存在しない時刻の値を取得 (asof=False)

import pandas as pd

# データフレームの作成
df = pd.DataFrame({'time': ['09:00', '10:00', '11:00', '12:00'], 'value': [10, 20, 30, 40]})

# インデックスに存在しない時刻の値を取得
value_at_1030am = df['value'].at_time('10:30', asof=False)

# 結果の出力
print(value_at_1030am)

出力

25

値が存在しない場合のデフォルト値を指定

import pandas as pd

# データフレームの作成
df = pd.DataFrame({'time': ['09:00', '10:00', '11:00', '12:00'], 'value': [10, 20, 30, 40]})

# 値が存在しない場合のデフォルト値を指定
value_at_1030am = df['value'].at_time('10:30', asof=False, default=50)

# 結果の出力
print(value_at_1030am)

出力

50

時刻範囲を指定して値を取得

import pandas as pd

# データフレームの作成
df = pd.DataFrame({'time': pd.to_datetime(['09:00', '10:00', '11:00', '12:00']), 'value': [10, 20, 30, 40]})

# 時刻範囲を指定して値を取得
start_time = pd.to_datetime('10:00')
end_time = pd.to_datetime('11:00')
values_between_10am_and_11am = df['value'].at_time(start_time, end_time)

# 結果の出力
print(values_between_10am_and_11am)

出力

0    20
1    30
Name: value, dtype: int64


pandas.Series.at_time 以外の方法

loc 属性を使用する

import pandas as pd

# データフレームの作成
df = pd.DataFrame({'time': ['09:00', '10:00', '11:00', '12:00'], 'value': [10, 20, 30, 40]})

# 特定の時刻の値を取得
value_at_10am = df.loc['10:00', 'value']

# 結果の出力
print(value_at_10am)

出力

20

iloc 属性を使用する

import pandas as pd

# データフレームの作成
df = pd.DataFrame({'time': ['09:00', '10:00', '11:00', '12:00'], 'value': [10, 20, 30, 40]})

# 特定の時刻の値を取得
value_at_10am = df.iloc[1, 1]

# 結果の出力
print(value_at_10am)

出力

20

.dt.time アクセッサーを使用する

import pandas as pd

# データフレームの作成
df = pd.DataFrame({'time': pd.to_datetime(['09:00', '10:00', '11:00', '12:00']), 'value': [10, 20, 30, 40]})

# 特定の時刻の値を取得
value_at_10am = df[df['time'].dt.time == pd.to_datetime('10:00')['value'].iat[0]

# 結果の出力
print(value_at_10am)

出力

20

これらの方法は、pandas.Series.at_time と同様に、特定の時刻の値を取得するために使用できます。

  • 読みやすさを重視する場合: loc 属性または iloc 属性を使用する
  • 処理速度を重視する場合: pandas.Series.at_time を使用する
  • 時刻を比較する必要がある場合: .dt.time アクセッサーを使用する



PandasのFY5253Quarter.is_year_start:52-53週会計年度の開始日を判定

pandas. tseries. offsets. FY5253Quarter. is_year_start は、pandas ライブラリの tseries. offsets モジュールにある関数です。この関数は、指定された日付が52-53週の会計年度の最初の四半期かどうかを判断します。



Pandas.tseries.offsets.BusinessHour.weekmask徹底解説

pandas. tseries. offsets. BusinessHour. weekmask は、BusinessHour オブジェクトで使用される属性で、曜日ごとにビジネスデーとして扱われるかどうかを指定します。デフォルトでは月曜日から金曜日までの営業日がビジネスデーとなりますが、weekmask を使用して、この設定を変更することができます。


Pandas で月末から1週間前の日付を取得する方法

例えば、今日から1週間後の日付を取得するには、以下のコードを使用できます。このコードは、今日の日付に DateOffset オブジェクトを加算することで、1週間後の日付を取得しています。LastWeekOfMonth は、月末から指定された間隔だけ前の日付を取得する DateOffset オブジェクトです。


pandasで月末までの日数に丸める:MonthEnd.normalize徹底解説

pandas. tseries. offsets. MonthEnd. normalize は、pandas ライブラリの DateOffset オブジェクトの normalize 属性にアクセスするための関数です。この属性は、DateOffset オブジェクトで表される日付を、その月の末日までの日数に丸めるかどうかを制御します。


【応用例】Pandasでスケジュール設定:WeekOfMonthオフセットで毎月の第2週に実行するタスクをスケジュール

pandas. tseries. offsets. WeekOfMonth は、月の第 x 週の y 日目 を指定するオフセットです。freqstr 属性はこのオフセットの文字列表現を取得するために使用されます。構文説明weekday (オプション): 週の何番目の曜日を取得するかを指定します。デフォルトは 1 (月曜日) です。



Pandas Series.str.lstrip:文字列の左側にある空白や指定文字列を除去する方法

pandas. Series. str. lstrip は、Series オブジェクト内の各文字列の左側にある空白や指定文字列を除去するために使用されます。これは、データ分析やデータクリーニングにおいて、文字列データを整理・整頓する際に非常に便利なメソッドです。


Pandas Data Offsets と CustomBusinessMonthBegin の完全解説

Pandas は、Python でデータ分析を行うための強力なライブラリです。Data Offsets は、日付や時刻の値に時間的な差分を加算したり減算したりするための機能です。CustomBusinessMonthBegin は、Data Offsets の一種で、特定の条件を満たす月初めのビジネス日を指定することができます。


Pandasで曜日・月・四半期・年ごとの集計:LastWeekOfMonthで月単位の分析

LastWeekOfMonth は、その月の最後の週を表す Data Offset です。例えば、2024年3月であれば、LastWeekOfMonth は 2024年3月25日から3月31日までの期間を表します。LastWeekOfMonth


Pandas Data Offsets と MonthEnd.is_month_end の徹底解説

Pandas は、時間系列データを扱うための強力な Python ライブラリです。Data offsets は、日付や時間軸を操作するための便利な機能です。pandas. tseries. offsets. MonthEnd は、月単位で日付を操作するためのオフセットです。


NumbaとPandasのユーティリティ関数:NumbaUtilErrorエラーを克服してパフォーマンスを向上させる

このチュートリアルでは、Pandasのユーティリティ関数で発生するpandas. errors. NumbaUtilErrorエラーについて詳しく解説します。このエラーの原因、解決策、および回避策を理解することで、Pandasコードをより効率的に実行できるようになります。