Python Pandas:DateTimeIndexのindexer_between_time()で特定時刻間の値のインデックス位置を取得する方法
DateTimeIndex内で、1日のうち特定の時刻の間に含まれる値のインデックス位置を取得するには、DateTimeIndex.indexer_between_time()メソッドを使用します。このメソッドは、開始時刻(start_time)と終了時刻(end_time)で指定した範囲に該当する要素の位置を配列として返します。
必要なライブラリのインポート
まず、pandasをインポートします。
import pandas as pd
DatetimeIndexの作成
期間(periods)を5、頻度(freq)を「20T」=20分間隔としてDatetimeIndexを作成します。タイムゾーンはオーストラリア/アデレード(Australia/Adelaide)を指定します。
datetimeindex = pd.date_range('2021-10-30 02:30:50', periods=5, tz='Australia/Adelaide', freq='20T')
DatetimeIndexの確認
作成したDateTimeIndexを表示して内容を確認します。
print("DateTimeIndex...\n", datetimeindex)
特定時刻間のインデックス位置を取得する
start_timeを「02:30:50」、end_timeを「03:20:50」に設定し、この時間帯に含まれる値のインデックス位置を取得して表示します。
print("\nIndex locations of values between particular time of day...\n",
datetimeindex.indexer_between_time('02:30:50','03:20:50'))
サンプルコード全体
以下は、ここまでの手順をまとめた完全なコード例です。比較のため、特定の時刻に一致する要素の位置を返すindexer_at_time()メソッドの使用例も併せて示しています。
import pandas as pd
# 期間5・頻度20分(20T)のDatetimeIndexを作成
# タイムゾーンはオーストラリア/アデレード
datetimeindex = pd.date_range('2021-10-30 02:30:50', periods=5, tz='Australia/Adelaide', freq='20T')
# DateTimeIndexを表示
print("DateTimeIndex...\n", datetimeindex)
# DateTimeIndexの頻度を表示
print("\nDateTimeIndex frequency...\n", datetimeindex.freq)
# 特定の時刻(ここでは03:10:50)に一致する値のインデックス位置を表示
print("\nIndex locations of values at particular time of day...\n",
datetimeindex.indexer_at_time('2021-10-30 03:10:50'))
# 特定の時刻の間に含まれる値のインデックス位置を表示
# start_timeは「02:30:50」、end_timeは「03:20:50」
print("\nIndex locations of values between particular time of day...\n",
datetimeindex.indexer_between_time('02:30:50','03:20:50'))
実行結果
上記のコードを実行すると、次のような出力が得られます。
DateTimeIndex... DatetimeIndex(['2021-10-30 02:30:50+10:30', '2021-10-30 02:50:50+10:30', '2021-10-30 03:10:50+10:30', '2021-10-30 03:30:50+10:30', '2021-10-30 03:50:50+10:30'], dtype='datetime64[ns, Australia/Adelaide]', freq='20T') DateTimeIndex frequency... <20 * Minutes> Index locations of values at particular time of day... [2] Index locations of values between particular time of day... [0 1 2]
出力の解説
indexer_at_time()は「03:10:50」に一致する要素が1つだけであるため、[2]を返します。一方、indexer_between_time()は「02:30:50〜03:20:50」の範囲に含まれる「02:30:50」「02:50:50」「03:10:50」の3要素に該当するため、[0 1 2]という結果になります。なお、デフォルト設定では開始時刻と終了時刻の両端も範囲に含まれます(include_start=True、include_end=True)。時刻のみが比較対象となるため、日付が異なるデータに対しても、同じ時間帯の要素を柔軟に抽出できるのが特徴です。
-
【Python・Pandas】utcnow()メソッドでUTCの日時を表す新しいタイムスタンプを取得する方法
Pandasのtimestamp.utcnow()メソッドを使うと、現在のUTC(協定世界時)の日時を表す新しいTimestampオブジェクトを取得できます。タイムゾーンに関係なく、常にUTC基準の時刻が返されるため、国際的なデータ処理やログ管理に便利です。必要なライブラリのインポートまず、Pandasライブラリをインポートします。import pandas as pdタイムスタンプの作成次に、tz引数に「UTC」を指定してTimestampオブジェクトを作成します。timestamp = pd.Timestamp(2021-10-16T15:12:34.261811624, tz=UTC)U
-
Python Pandasで2つのインデックス値の間にあるDataFrameの行を選択する方法
Pandasでは、スライス(slice)記法を使うことで、2つのインデックス値の間に位置する行を簡単に抽出できます。この記事では、具体的なサンプルコードとともに、その手順をわかりやすく解説します。 手順 2次元の、サイズ変更可能で異なる型のデータも格納できる表形式データとして、df を作成します。 入力用のDataFrame df を出力して確認します。 インデックスの下限値(開始位置)を変数として初期化します。 インデックスの上限値(終了位置)を別の変数として初期化します。 df[index_lower_limit:index_upper_limit] の形式でスライスし、指定した範囲の行