2016-07-19 24 views
2

Ich habe folgende Pandas Datenrahmen:Wie speichert man einen Pandas DataFrame als HDFS PyTables-Tabelle (oder CArray, EArray, etc.)?

import pandas as pd 
df = pd.read_csv(filename.csv) 

Jetzt kann ich HDFStore verwenden, um das df Objekt zu schreiben in einer Datei (wie das Hinzufügen von Schlüssel-Wert-Paaren zu einem Python-Wörterbuch):

store = HDFStore('store.h5') 
store['df'] = df 

http://pandas.pydata.org/pandas-docs/stable/io.html Wenn ich mir den Inhalt anschaue, ist dieses Objekt ein frame.

store 

Ausgänge

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

Um jedoch Indizierung zu verwenden, sollte man diesen Speicher als table Objekt.

Mein Ansatz war HDFStore.put() heißt

HDFStore.put(key="store.h", value=df, format=Table) 

jedoch zu versuchen, dies nicht gelingt mit dem Fehler:

TypeError: put() missing 1 required positional argument: 'self' 

Wie kann man Pandas Dataframes als PyTables Tabellen speichern?

Antwort

2

gemeinsamen Teil - öffnen oder neu anlegen bestehende HDFStore Datei:

store = pd.HDFStore('store.h5') 

die Sie interessieren, wenn Sie alle Spalten indiziert haben wollen:

store.append('key_name', df, data_columns=True) 

oder diese Option, wenn Sie nur indiziert haben wollen eine Untergruppe von Spalten:

store.append('key_name', df, data_columns=['colA','colC','colN']) 

PS HDFStore.append() spart DFs standardmäßig in table Format

+0

Danke. Wie würden Sie dies als CArray oder EArray speichern? – JianguoHisiang

+0

@ JianguoHisiang, ich habe keine Erfahrung mit CArray/Earray, also kann ich Ihre Frage im Kommentar nicht beantworten. Aber was ist falsch mit HDFStore? Hat meine Antwort geholfen? – MaxU

+0

Es ist richtig, ja. Ich bin mir jedoch nicht sicher, wie dieses 'frame_table'-Objekt abgefragt wird (es ist kein' table '-Objekt). Normalerweise würden Sie versuchen, etwas wie 'Ergebnis = [Zeile für Zeile in der Tabelle.Where ('Spalte1> 100 & Spalte1 <200')]' Wenn 'Spalte1 'indiziert ist. – JianguoHisiang

0

How does one save Pandas Dataframes as PyTables tables?

auf die akzeptierte Antwort hinzufügen, sollten Sie immer die PyTable Datei schließen. Aus praktischen Gründen stellt Pandas den HDFStore als Kontextmanager zur Verfügung:

with pd.HDFStore('/path/to/data.hdf') as hdf: 
    hdf.put(key="store.h", value=df, format='table', data_columns=True)