2012-05-12 50 views
16

我使用python現在工作了相當長的一段時間,大熊貓選擇特定的時間分析一組每小時的數據,並發現它相當不錯(從MATLAB來了。)大熊貓,蟒蛇 - 如何在時間序列

現在我那種卡住了。我建立了我的DataFrame這樣的:

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

我想現在要做的就是在10小時至13和20-23選擇數據的所有天使用數據進行進一步的計算。 到目前爲止,我使用

selectedData=ts[begin:end] 

切片數據而且我一定要得到某種骯髒的循環來選擇所需要的數據。但是,必須有一個更優雅的方式來索引我想要的東西。我相信這是一個普遍的問題,在僞代碼解決方案應該看起來有點像:

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

更何況我是一個工程師,沒有程序設計師:) ...但

回答

7

這裏的,做一個例子你想要什麼:

In [32]: from datetime import datetime as dt 

In [33]: dr = p.DateRange(dt(2009,1,1),dt(2010,12,31), offset=p.datetools.Hour()) 

In [34]: hr = dr.map(lambda x: x.hour) 

In [35]: dt = p.DataFrame(rand(len(dr),2), dr) 

In [36]: dt 

Out[36]: 
<class 'pandas.core.frame.DataFrame'> 
DateRange: 17497 entries, 2009-01-01 00:00:00 to 2010-12-31 00:00:00 
offset: <1 Hour> 
Data columns: 
0 17497 non-null values 
1 17497 non-null values 
dtypes: float64(2) 

In [37]: dt[(hr >= 10) & (hr <=16)] 

Out[37]: 
<class 'pandas.core.frame.DataFrame'> 
Index: 5103 entries, 2009-01-01 10:00:00 to 2010-12-30 16:00:00 
Data columns: 
0 5103 non-null values 
1 5103 non-null values 
dtypes: float64(2) 
+0

Works!非常感謝! –

+2

下面是如何在0.10的語法中實現此解決方案,並將其與Wes的答案相結合: 'dr = pd.date_range(dt(2009,1,1),dt(2010,12,31),freq = 'H'); dt = pd.DataFrame(rand(len(dr),2),dr); hour = dt.index.hour; selector =((10 <=小時)&(小時<= 13))| ((20 <=小時)&(小時<= 23)) data = dt [selector]' –

24

在即將到來的大熊貓0.8.0,你就可以寫

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

,因爲它看起來在我的上述評論凌亂,我決定提供另一種答案這是大熊貓0.10.0對馬克的回答語法更新,與Wes的提示合併:

import pandas as pd 
from datetime import datetime 

dr = pd.date_range(datetime(2009,1,1),datetime(2010,12,31),freq='H') 
dt = pd.DataFrame(rand(len(dr),2),dr) 
hour = dt.index.hour 
selector = ((10 <= hour) & (hour <= 13)) | ((20<=hour) & (hour<=23)) 
data = dt[selector] 
+0

dt包和dt變量 –

0

大熊貓數據框中有一個內置的功能 pandas.DataFrame.between_time

df = pd.DataFrame(np.random.randn(1000, 2), 
        index=pd.date_range(start='2017-01-01', freq='10min', periods=1000)) 

創建的每個時間段2個的數據幀:你想

df1 = df.between_time(start_time='10:00', end_time='13:00') 
df2 = df.between_time(start_time='20:00', end_time='23:00') 

數據幀合併和分類df1和df2:

pd.concat([df1, df2], axis=0).sort_index()