pandas, python - how to select specific times in timeseries

Dr. Dave picture Dr. Dave · May 12, 2012 · Viewed 22k times · Source

I worked now for quite some time using python and pandas for analysing a set of hourly data and find it quite nice (Coming from Matlab.)

Now I am kind of stuck. I created my DataFrame like that:

SamplingRateMinutes=60
index = DateRange(initialTime,finalTime, offset=datetools.Minute(SamplingRateMinutes))
ts=DataFrame(data, index=index)

What I want to do now is to select the Data for all days at the hours 10 to 13 and 20-23 to use the data for further calculations. So far I sliced the data using

 selectedData=ts[begin:end]

And I am sure to get some kind of dirty looping to select the data needed. But there must be a more elegant way to index exacly what I want. I am sure this is a common problem and the solution in pseudocode should look somewhat like that:

myIndex=ts.index[10<=ts.index.hour<=13 or 20<=ts.index.hour<=23]
selectedData=ts[myIndex]

To mention I am an engineer and no programer :) ... yet

Answer

Wes McKinney picture Wes McKinney · May 12, 2012

In upcoming pandas 0.8.0, you'll be able to write

hour = ts.index.hour
selector = ((10 <= hour) & (hour <= 13)) | ((20 <= hour) & (hour <= 23))
data = ts[selector]