Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python Pandas入門:DateTimeIndexで開始時刻を含む特定の時刻範囲の値のインデックス位置を取得する方法

DateTimeIndexの中から、特定の時刻の範囲(time of day)に該当する値のインデックス位置を取得するには、indexer_between_time()メソッドを使用します。開始時刻そのものを検索結果に含めたい場合は、include_startパラメータをTrueに設定します。

必要なライブラリのインポート

まずは、必要なライブラリをインポートします。

import pandas as pd

DatetimeIndexの作成

次に、期間7・頻度20分(freq='20T')・タイムゾーン「Australia/Adelaide」を指定してDatetimeIndexを作成します。

datetimeindex = pd.date_range('2021-10-30 02:30:50', periods=7, tz='Australia/Adelaide', freq='20T')

なお、pandas 2.2以降では「T」エイリアスは非推奨となっているため、新しいバージョンを使用している場合は「freq='20min'」と指定することが推奨されています。

DateTimeIndexの表示

作成したDateTimeIndexを確認してみましょう。

print("DateTimeIndex...\n", datetimeindex)

特定の時刻範囲のインデックス位置を取得する

start_timeを「03:10:50」、end_timeを「03:50:50」に設定し、include_start=Trueを指定してindexer_between_time()を呼び出します。

print("\nIndex locations of values between particular time of day...\n",
datetimeindex.indexer_between_time('03:10:50','03:50:50', include_start = True))

サンプルコード全体

以下が完全なコード例です。

import pandas as pd

# 期間7・頻度20分・タイムゾーンAustralia/AdelaideのDatetimeIndexを作成
datetimeindex = pd.date_range('2021-10-30 02:30:50', periods=7, 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='03:10:50'、end_time='03:50:50'、include_start=True
print("\nIndex locations of values between particular time of day...\n",
datetimeindex.indexer_between_time('03:10:50','03:50:50', include_start = True))

実行結果

上記のコードを実行すると、次のような出力が得られます。

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', '2021-10-30 04:10:50+10:30',
'2021-10-30 04:30: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...
[2 3 4]

結果の解説

実行結果からわかるように、03:10:50〜03:50:50の範囲に該当するのは、インデックス位置2(03:10:50)、3(03:30:50)、4(03:50:50)の3つの要素です。include_start=Trueを指定しているため、開始時刻である03:10:50も結果に含まれています。逆にinclude_start=Falseを指定した場合は、開始時刻ちょうどの値は除外されます。同様に、終了時刻の扱いを制御したい場合はinclude_endパラメータを使用できます。

  1. 【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

  2. Python Pandasで2つのインデックス値の間にあるDataFrameの行を選択する方法

    Pandasでは、スライス(slice)記法を使うことで、2つのインデックス値の間に位置する行を簡単に抽出できます。この記事では、具体的なサンプルコードとともに、その手順をわかりやすく解説します。 手順 2次元の、サイズ変更可能で異なる型のデータも格納できる表形式データとして、df を作成します。 入力用のDataFrame df を出力して確認します。 インデックスの下限値(開始位置)を変数として初期化します。 インデックスの上限値(終了位置)を別の変数として初期化します。 df[index_lower_limit:index_upper_limit] の形式でスライスし、指定した範囲の行