2012-10-16 11 views
5

Viele Informationen darüber, wie man eine CSV in einen Pandas Datenrahmen lesen, aber ich, was ich habe, ist eine pyTable Tabelle und möchte einen Pandas DataFrame.Pytables Tabelle in Pandas DataFrame

Ich habe festgestellt, wie meine Pandas Dataframe - pytables speichern ... dann lese ich es an dieser Stelle zurück, lesen möchten, wird es haben:

"kind = v._v_attrs.pandas_type" 

ich es schreiben konnte aus als csv und wieder lesen, aber das scheint albern. Es ist, was ich gerade mache.

Wie soll ich pytable Objekte in Pandas lesen?

Antwort

5
import tables as pt 
import pandas as pd 
import numpy as np 

# the content is junk but we don't care 
grades = np.empty((10,2), dtype=(('name', 'S20'), ('grade', 'u2'))) 

# write to a PyTables table 
handle = pt.openFile('/tmp/test_pandas.h5', 'w') 
handle.createTable('/', 'grades', grades) 
print handle.root.grades[:].dtype # it is a structured array 

# load back as a DataFrame and check types 
df = pd.DataFrame.from_records(handle.root.grades[:]) 
df.dtypes 

Beachten Sie, dass Ihr u2 (unsigned 2-Byte-Ganzzahl) als i8 enden wird (integer 8 Byte), und die Saiten werden Objekte, denn Pandas noch nicht das gesamte Spektrum der dtypes unterstützen, die verfügbar sind für Numpy-Arrays.

+0

danke, aber wie liest das Daten von einer Pandas h5-Datei in eine Pandas h5-Datei? Es sieht so aus, als würde es zufällige Daten in eine pandas h5-Datei einfügen. Ich kann meine Quelltabelle so lesen 'für rec in table:' aber die Tabelle ist keine pandas h5-Datei, es ist nur eine pytable-Tabelle, so dass sie als pandas-Quelle fehlschlägt, weil 'kind' nicht 'pandas_type' ist. –

+0

Warte, ich verbringe etwas mehr Zeit damit ... sagst du, alles was ich tun muss, ist ein strukturiertes Array mit zusätzlichen Datentypen info zu meiner bestehenden pytables Tabelle hinzuzufügen und dann wird es in Pandas df importiert? Ich kann wirklich nur mit pyTables arbeiten ... Es hält Datentypinfo in Attributen auf dem Blattobjekt. Wenn ich das richtig verstanden habe, assoziieren Pandas zwei Blattobjekte. (eine mit Datentypinfo, eine mit der Datentabelle) –

+0

import numpy als np Noten = np.lepty ((10,2), dtype = (('name', 'S20'), ('grade', 'u2'))) Das muss ein Bug sein Python versteht den Code nicht –

5

Die Dokumentation enthält jetzt einen ausgezeichneten Abschnitt zu using the HDF5 store und es gibt einige erweiterte Strategien in der cookbook diskutiert.

Es ist jetzt relativ einfach:

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

In [2]: print store 
<class 'pandas.io.pytables.HDFStore'> 
File path: store.h5 
Empty 

In [3]: df = DataFrame([[1, 2], [3, 4]], columns=['A', 'B']) 

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

In [5]: store 
<class 'pandas.io.pytables.HDFStore'> 
File path: store.h5 
/df   frame  (shape->[2,2]) 

Und von HDF5/pytables abzurufen:

In [6]: store['df'] # store.get('df') is an equivalent 
Out[6]: 
    A B 
0 1 2 
1 3 4 

Sie können auch query within a table.