2016-07-12 15 views
2

Kann man Pytables (oder Pandas) verwenden, um zu erkennen, ob die Tabelle einer hdf-Datei eine bestimmte Spalte enthält? Um die hdf Datei zu laden benutze ich:Pytables prüfen, ob die Spalte existiert

from pandas.io.pytables import HDFStore 
# this doesn't read the full file which is good 
hdf_store = HDFStore('data.h5', mode='r') 
# returns a "Group" object, not sure if this could be used... 
hdf_store.get_node('tablename') 

Ich könnte auch Pytables direkt anstelle von Pandas verwenden. Das Ziel ist nicht, alle Daten der hdf-Datei zu laden, da diese Dateien potentiell groß sind und ich nur feststellen möchte, ob eine bestimmte Spalte existiert.

+0

versuchen, dies: 'hdf_store [ 'tablename'] columns' – MaxU

+0

Dies dauert eine lange Zeit (3GB hdf-Datei) in Anspruch nehmen, so dass ich denke, es ist in der vollständigen Datei zerrt.. Aber es gibt die Spalten zurück. – orange

Antwort

2

Ich habe vielleicht eine Lösung gefunden, bin mir aber nicht sicher, (1) warum es funktioniert und (2) ob dies eine robuste Lösung ist.

import tables 
h5 = tables.openFile('data.h5', mode='r') 
df_node = h5.root.__getattr__('tablename') 
# Not sure why `axis0` contains the column data, but it seems consistent 
# with the tested h5 files. 
columns = df_node.axis0[:] 

columns enthält ein Array mit den numpy alle Spaltennamen.

+1

Das ist ziemlich schlau! Hier ist ein Pandas-Äquivalent: 'pd.HDFStore ('data.h5'). Get_node ('Tabellenname'). Axis0 [:]' – MaxU

0

Die akzeptierte Lösung funktioniert nicht mit Pandas 0.20.3 und PyTables 3.3.0 (die HDF-Datei wurde mit Pandas erstellt). Dies funktioniert jedoch:

pd.HDFStore('data.hd5', mode='r').get_node('/path/to/pandas/df').table.colnames