2013-07-23 6 views
10

Pandas ein nice interface hat, die die Speicherung Dinge wie Dataframes und Serie in einem HDF5 erleichtert:Speicher Pandas Objekte mit regelmäßigen Python-Objekten in HDF5 entlang

random_matrix = np.random.random_integers(0,10, m_size) 
my_dataframe = pd.DataFrame(random_matrix) 

store = pd.HDFStore('some_file.h5',complevel=9, complib='bzip2') 
store['my_dataframe'] = my_dataframe 
store.close() 

Aber wenn ich versuche, einige anderen regelmäßigen Python-Objekte in derselben zu speichern Datei, es klagt:

my_dictionary = dict() 
my_dictionary['a'] = 2   # <--- ERROR 
my_dictionary['b'] = [2,3,4] 

store['my_dictionary'] = my_dictionary 
store.close() 

mit

TypeError: cannot properly create the storer for: [_TYPE_MAP] [group->/par 
ameters (Group) u'',value-><type 'dict'>,table->None,append->False,kwargs- 
>{}]         

Wie kann ich stor E regelmäßige Python-Datenstrukturen in der gleichen HDF5, wo ich andere Pandas-Objekte speichern?

Antwort

11

Hier ist das Beispiel aus dem Kochbuch: http://pandas.pydata.org/pandas-docs/stable/cookbook.html#hdfstore

Sie beliebige Objekte als Attribute eines Knotens speichern kann. Ich glaube es gibt ein 64kb Limit (ich denke seine Gesamtattributdaten für diesen Knoten). Die Objekte sind gebeizt

In [1]: df = DataFrame(np.random.randn(8,3)) 

In [2]: store = HDFStore('test.h5') 

In [3]: store['df'] = df 

# you can store an arbitrary python object via pickle 
In [4]: store.get_storer('df').attrs.my_attribute = dict(A = 10) 

In [5]: store.get_storer('df').attrs.my_attribute 
{'A': 10} 
+0

Vielen Dank! Übrigens bekomme ich 'PerformanceWarnings' mit einigen' store' Befehlen. Ich habe versucht, sie zu deaktivieren mit: 'import warnings; warnings.simplefilter (action = "ignoriere", category = PerformanceWarning) 'aber ich bekomme' Name 'PerformanceWarning' ist nicht definiert '. Weißt du, wie man sie stumm macht? –

+1

Eigentlich sollte man darauf achten. Sie sagen im Grunde, dass Sie einen Datentyp speichern, den PyTables "einlegen" soll! Versuchen Sie, als Tabelle zu speichern (verwenden Sie entweder '' append'' oder '' store.put ('df', df, table = True) '', die im '' Table '' Format speichern, bessere Handhabung von Dingen wie '' nan'' bestimmte dtypes (dass das '' Storer''-Format Ihnen ein PerfWarning gibt. Siehe http://pandas.pydata.org/pandas-docs/dev/io.html#table-format – Jeff

+1

Wenn Sie das wirklich wollen Stumm sie, versuchen: '' von pandas.io.pytables importieren PerformanceWarning''. aber sehen Sie meinen Kommentar oben. Dies ist aus einem bestimmten Grund – Jeff