2017-10-04 27 views
1

我使用findatapy從DukasCopy獲取外匯匯率,該軟件包非常好用。這是我使用的腳本:將日期時間索引過濾器過濾爲一定頻率的大熊貓

from findatapy.market import Market, MarketDataRequest, MarketDataGenerator 

market = Market(market_data_generator=MarketDataGenerator()) 

md_request = MarketDataRequest(start_date='01 Feb 2017', finish_date='03 Feb 2017', category='fx', fields=['bid', 'ask'], freq='tick', data_source='dukascopy', tickers=['EURUSD']) 

df = market.fetch_market(md_request) 

print(df) 
print(len(df)) 
print(df.index) 
print(len(df.index)) 

我只對有每小時頻點感興趣(00:00:00,01:00:00,02:00:00等)。這意味着經過篩選後,我每天只能得到24分。

現在,我得到的結果是,這是。

DF:

enter image description here

df.index:

enter image description here

我想現在是什麼做的,但我完全茫然不知如何呢,是使用小時頻率過濾索引,然後選擇相應的點。

我認爲我應該做的是創建一個熊貓數組,具有所需的索引,並用它來切片我的主數組,但我該怎麼做? pandas.date_range可以幫助我創建這個'想要的'數組嗎?還是有更簡單的方法呢?

謝謝你的時間。

+0

@cᴏʟᴅsᴘᴇᴇᴅ這個偉大的工作:),這是我一直在尋找的結果。我也想分解索引向量(這是我的'Date'向量),但我會盡力找到自己的方式,因爲它看起來'更容易'。非常感謝! –

+0

你能解釋你想如何拆分?我不清楚那一點。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅ如果你只看到'df.index'的結果,你會看到day + blankspace + hour。我想分別將它分成「日」和「小時」。 –

回答

1

您可以只使用pd.TimeGrouper對象並提取第一排的每個小時組,這樣的事情:

df = df.groupby(pd.TimeGrouper('1H')).head(1) 
+0

@COLDSPEED再次感謝你,我會採取第二行,因爲我注意到df.resample('1H')。mean()計算的值之間的平均值間隔,這不是我想要的。我只想要最接近每個小時的時間,這是我通過使用df.groupby(pd.TimeGrouper('1H'))得到的結果。head(1) –

+1

@AquilesPáez好吧,別擔心。我加了兩個,因爲我不是100%確定你想要什麼。另外,如果你想分割索引,你可以做'd = df.index.day; h = df.index.hour'。 –