我正在處理大量數據集,每個數據集都是一個pandas DataFrame,因爲它們的大小,我需要從磁盤訪問它。從我讀到的內容來看,HDF看起來是一個很好的工作方式,但是由於各個DataFrame中包含的各種元數據元素,我對構建數據的最佳方式感到困惑。如果我存儲在內存中的數據我大概可以使用像一個namedtuple(雖然這不會允許輕鬆查詢):在HDF商店中構造數據
DataSet = namedtuple('DataSet', 'model method id data')
data
是控股的實際數據框屬性,和其它字段文本。但是,我現在需要包含一系列結果字段,我可能會在內存中使用DataFrame的字典來完成這些結果字段。如果我這個轉儲到MongoDB中,我想可能有一些看起來像這樣:
[{
model: 'mir',
method: 'rfl_max',
id: 's0001',
data: <DataFrame>,
results: [
{
option_r: 10,
window: 30,
data: <DataFrame>
},
...
]
},
....
]
我的基本問題是,我可以有效地這種結構適用於HDF?具體如下:
- HDF是否支持這種嵌套,如果是的話,我該怎麼做?
- 查找這樣的數據在mongo中效率很高,因爲它使用索引。對於HDF也是如此,例如我能否有效地找到匹配特定方法和option_r的所有結果?
- 我對HDF的經驗有限,是通過熊貓,這似乎只允許存儲面板上的Series,DataFrames。這是一個真正的限制,還是我只是做錯了什麼?
另外,有沒有人知道一個基於文件的mongodb實現可能符合我的目的?
感謝您的回覆。所以你說在mongo中任何複雜的查詢都會更好,但是將數據存儲在HDF5中是好的嗎?我試圖避免mongo,因爲它需要一箇中央服務器(我無法訪問),因此很難共享數據。每個DataFrame都不是很大,目前我只是在酸洗它們並將它們加載到內存中,所以也許我應該繼續, – aquavitae
複雜查詢當然可以在HDF5中完成。但是,您無法輕鬆查詢節點本身。請參閱pytables.org更多信息。 – Jeff