5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

メモ: Pandasの時系列データから特定時間帯を抜き出す

Last updated at Posted at 2017-12-30

モチベーション

複数日にまたがるデータから特定の時間帯(例えば株式市場の開いている時間)などを取り出したいとき、datetime.datetimeオブジェクトとの比較ではうまくいかない(datetime.datetimeオブジェクトは年月日を指定しなければならないため、一つのオブジェクトとの単純な比較ではかけない)しどのようにすればよいのかわからなかった。

手法

結論から言うとdatetime.timeをうまく用いればよい。panda.Timestampはdatetime.datetimeを継承しているので、datetime.datetimeの持つ種々のメソッドを持っている。datetime.datetimeオブジェクトはdatetime.timeを返す関数timeを持っているので、それと目的の時刻をdatetime.timeとしたものをうまく比較すればよい。すなわち
df[(df["time"].apply(lambda x:x.time()) > time(huga)) & (df["time"].apply(lambda x:x.time()) < time(huge)) ]
のように選んでやればよい。
#具体例
例えば9時から15時のみのデータを取り出したいときは以下のようにすればよい。

sample.py
import numpy as np
import pandas as pd
from datetime import time,timedelta
start = pd.Timestamp("2017-12-01")
end = pd.Timestamp("2017-12-03")
df =  pd.DataFrame(  pd.date_range(start, end  ,freq="10T"),columns = ["time"])
df[(df["time"].apply(lambda x:x.time()) > time(hour=9)) & (df["time"].apply(lambda x:x.time()) < time(hour=15)) ]

もっと良いやり方があるかもしれないので編集リクエスト待ってます。

5
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?