2017-01-18 159 views
1

Python新手在這裏,但我有一些數據是日內的財務數據,可以回到2012年,所以它每天都有相同的小時數(每天同一交易時段),但只是不同的日期。我希望能夠從數據中選擇某些時間並檢查相應的OHLC數據,然後對其進行一些分析。Python - 選擇特定的時間範圍熊貓

所以目前它是一個CSV文件,我做:

import pandas as pd 
data = pd.DataFrame.read_csv('data.csv') 

date = data['date'] 
op = data['open'] 
high = data['high'] 
low = data['low'] 
close = data['close'] 
volume = data['volume'] 

的事情是,日期列是在「DD/MM/YYYY 00:00:00」的格式作爲一個字符串或其他什麼,那麼是否有可能仍然在某個時間之間進行選擇,例如「09:00:00」和「10:00:00」之間?還是我必須將時間從日期中分離出來,並製作成自己的專欄?如果是這樣,怎麼樣?

所以我相信大熊貓有一個between_time()函數,但似乎需要一個DataFrame,所以我怎樣才能將它轉換爲DataFrame,然後我應該能夠使用between_time函數來選擇我想要的時間。另外,因爲顯然有成千上萬天,所有這些都有自己的「xx:xx:xx」到「xx:xx:xx」,我希望從每一天中抽出相同的時間段,而不僅僅是第一批「xx:xx:xx」爲「xx:xx:xx」,因爲它可以使數據順利下來,如果這樣做合理的話。謝謝!!

+0

實際上日期格式是yyyy-mm-dd。我認爲這是使它無法正常工作的原因。我已經完成了parse_dates = True和index_col = 0作爲read_csv()的參數,但是當我嘗試打印df.head()時它給了我一個KeyError:'date'。 – spergy

+0

我真正想要達到的是在我所需的時間段(07:00:00 - 08:00:00)內計算我所有數據每天的範圍(高 - 低)。誰能幫忙?謝謝! – spergy

回答

2

考慮數據框df

from pandas_datareader import data 

df = data.get_data_yahoo('AAPL', start='2016-08-01', end='2016-08-03') 
df = df.asfreq('H').ffill() 

選項1
轉換index到一系列然後dt.hour.isin

slc = df.index.to_series().dt.hour.isin([9, 10]) 
df.loc[slc] 

選項2
numpy廣播

slc = (df.index.hour[:, None] == [9, 10]).any(1) 
df.loc[slc] 

enter image description here


迴應置評

然後,爲了得到每一天時隙內的範圍內,使用resample + agg + np.ptp(峯峯值)

df.loc[slc].resample('D').agg(np.ptp) 
+0

我真正想要實現的是在我想要的時間段(07:00:00 - 08:00:00)內計算我所有數據上每天的範圍(高 - 低)。誰能幫忙?謝謝! – spergy

+0

謝謝!是的,我知道對不起,不知道如何編輯我原來的帖子,只是看到了編輯選項,doh! :( – spergy