2016-06-24 123 views
3

我試圖打開與大熊貓一組少HDF5文件:閱讀HDF5數據集與熊貓

import pandas as pd 
foo = pd.read_hdf('foo.hdf5') 

,但我得到一個錯誤:

TypeError: cannot create a storer if the object is not existing nor a value are passed

我試圖通過分配解決這個key

foo = pd.read_hdf('foo.hdf5','key') 

這工作,如果key是一個組,但該文件沒有分組,而是幾個大以最高hdf結構進行製造。即工作文件的結構是:組 - >數據集,而不工作文件的結構是:數據集。

f = h5py.File('foo.hdf5','r') 

dset = f['dataset'] 

查看數據集:與h5py,在那裏我會用打開時他們都工作得不錯。任何想法如何閱讀熊貓?

+0

如果你嘗試會發生什麼:'DF = PD。 read_hdf('foo.hdf5','數據集')'? – MaxU

+0

可能相關:[熊貓無法讀取用h5py創建的hdf5文件](https://stackoverflow.com/questions/33641246/pandas-cant-read-hdf5-file-created-with-h5py) – unutbu

回答

2

我認爲不同的術語you'are困惑 - 熊貓的HDF店key是即Group + DataSet_name完整路徑...

演示:

In [67]: store = pd.HDFStore(r'D:\temp\.data\hdf\test.h5') 

In [68]: store.append('dataset1', df) 

In [69]: store.append('/group1/sub_group1/dataset2', df) 

In [70]: store.groups 
Out[70]: 
<bound method HDFStore.groups of <class 'pandas.io.pytables.HDFStore'> 
File path: D:\temp\.data\hdf\test.h5 
/dataset1        frame_table (typ->appendable,nrows->9,ncols->2,indexers->[index]) 
/group1/sub_group1/dataset2   frame_table (typ->appendable,nrows->9,ncols->2,indexers->[index])> 

In [71]: store.items 
Out[71]: 
<bound method HDFStore.items of <class 'pandas.io.pytables.HDFStore'> 
File path: D:\temp\.data\hdf\test.h5 
/dataset1        frame_table (typ->appendable,nrows->9,ncols->2,indexers->[index]) 
/group1/sub_group1/dataset2   frame_table (typ->appendable,nrows->9,ncols->2,indexers->[index])> 

In [72]: store.close() 

In [73]: x = pd.read_hdf(r'D:\temp\.data\hdf\test.h5', 'dataset1') 

In [74]: x.shape 
Out[74]: (9, 2) 

In [75]: x = pd.read_hdf(r'D:\temp\.data\hdf\test.h5', '/group1/sub_group1/dataset2') 

In [76]: x.shape 
Out[76]: (9, 2) 
+0

輸出爲 '''<綁定方法HDFStore.items 文件路徑:/path/foo.hdf5 Empty>''' – hsnee

+0

我不認爲這是一個忘記關閉的問題文件。我只是試着用h5py打開和關閉它,就像我通常那樣,它工作的很好。我也嘗試創建2個新的hdf5文件。一個有一個結構:組 - >幾個數據集,另一個:幾個數據集。第一次打開通常是以熊貓的名字作爲關鍵字,第二次則不是。 – hsnee

+0

@hnee,你是說'Group'是什麼意思?你能否用不工作的例子更新你的問題? – MaxU