我有一個關於如何過濾pd.read_hdf函數結果的問題。所以這裏是設置,我有一個熊貓數據框(與np.datetime64索引),我把它放入一個hdf5文件。這裏沒有什麼奇特的東西,所以沒有使用層次結構或任何東西(也許我可以把它合併?)。這裏有一個例子:熊貓read_hdf按日期和時間範圍查詢
store = pd.HDFStore('qux.h5')
#generate df
store.append('data', df)
store.close()
接下來,我將有另一個進程它訪問數據,我想借此日期:
Foo Bar
TIME
2014-07-14 12:02:00 0 0
2014-07-14 12:03:00 0 0
2014-07-14 12:04:00 0 0
2014-07-14 12:05:00 0 0
2014-07-14 12:06:00 0 0
2014-07-15 12:02:00 0 0
2014-07-15 12:03:00 0 0
2014-07-15 12:04:00 0 0
2014-07-15 12:05:00 0 0
2014-07-15 12:06:00 0 0
2014-07-16 12:02:00 0 0
2014-07-16 12:03:00 0 0
2014-07-16 12:04:00 0 0
2014-07-16 12:05:00 0 0
2014-07-16 12:06:00 0 0
現在,我使用下面的命令保存到一個.h5這/這個數據的時間片。因此,假設我想要2014-07-14和2014-07-15之間的日期,並且只在12:02:00和12:04:00之間。目前我使用下面的命令來檢索此:
pd.read_hdf('qux.h5', 'data', where='index >= 20140714 and index <= 20140715').between_time(start_time=datetime.time(12,2), end_time=datetime.time(12,4))
據我所知,有人請糾正我,如果我錯了這裏,但如果我使用'整個原始數據集不會被讀入內存哪裏'。所以,換句話說:
此:
pd.read_hdf('qux.h5', 'data', where='index >= 20140714 and index <= 20140715')
是不一樣的:
pd.read_hdf('qux.h5', 'data')['20140714':'20140715']
雖然最終的結果是完全一樣的,什麼東西被在後臺完成是沒有的。所以我的問題是,是否有辦法將時間範圍過濾器(即betweenbetweentime())合併到我的where語句中?或者如果還有另一種方法我應該構建我的hdf5文件?也許每天都會儲存一張桌子?
謝謝!
編輯:
採用層次結構關於,我知道的是,結構應該是高度依賴於我如何將要使用的數據。但是,如果我們假設我爲每個日期定義了一個表(例如'df/date_20140714','df/date_20140715',...)。我可能再次在這裏弄錯了,但用我查詢日期/時間範圍的例子;我可能會招致性能損失,因爲我需要閱讀每個表,並且如果我想要合併輸出,就必須合併它們。
是否可以將它與常規字符串where子句相結合,例如,如果我也想通過'「sym ='RIC'」'過濾? – 2017-08-10 09:05:28