2016-06-24 9 views
3

Ich versuche, eine Gruppe lose hdf5 Datei mit Pandas zu öffnen:Lesen hdf5 Datensätze mit Pandas

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

aber ich erhalte eine Fehlermeldung:

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

ich schon versucht, diese Lösung durch eine Zuweisung key:

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

, die funktioniert, wenn key eine Gruppe war, aber die Datei keine Gruppen hat, sondern mehrere da tasts in der höchsten hdf-Struktur. die Struktur der Arbeitsdatei ist: Gruppen -> Datensätze, während die Struktur der nicht funktionierenden Datei ist: Datensätze. Beide arbeiten gut, wenn sie mit h5py öffnen, wo ich verwenden würde:

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

und

dset = f['dataset'] 

einen Datensatz anzuzeigen. Irgendwelche Ideen, wie man das in Pandas liest?

+0

, was passiert, wenn Sie versuchen: 'df = pd. read_hdf ('foo.hdf5', 'Datensatz') '? – MaxU

+0

Möglicherweise verwandt: [Pandas kann die mit h5py erstellte hdf5-Datei nicht lesen] (https://stackoverflow.com/questions/33641246/pandas-cant-read-hdf5-file-created-with-h5py) – unutbu

Antwort

2

denke ich you'are verwirrt durch eine andere Terminologie - Pandas des HDF store key ist ein vollständiger Pfad dh Group + DataSet_name ...

Demo:

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

Die Ausgabe ist '' ' Dateipfad: /path/foo.hdf5 Empty>' '' – hsnee

+0

Ich denke nicht, dass es ein Problem ist, zu vergessen, einen zu schließen Datei. Ich habe gerade versucht, es mit h5py zu öffnen und zu schließen, wie ich es normalerweise tue, und es funktioniert gut. Ich habe auch versucht, 2 neue hdf5-Dateien zu erstellen. Eine hat eine Struktur: Gruppe -> mehrere Datensätze, und die andere: mehrere Datensätze. Der erste öffnet sich normal mit Pandas, wobei der Name der Gruppe als Schlüssel verwendet wird, der zweite nicht. – hsnee

+0

@hsnee, was meinst du mit 'Gruppe'? Könnten Sie Ihre Frage mit dem nicht funktionierenden Beispiel aktualisieren? – MaxU