leer el archivo HDF5 a pandas DataFrame con condiciones

Tengo un archivo HDF5 enorme, quiero cargar parte de él en un DataFrame de pandas para realizar algunas operaciones, pero estoy interesado en filtrar algunas filas.

Puedo explicar mejor con un ejemplo:

El archivo HDF5 original se vería algo así como:

ABCD 1 0 34 11 2 0 32 15 3 1 35 22 4 1 34 15 5 1 31 9 1 0 34 15 2 1 29 11 3 0 34 15 4 1 12 14 5 0 34 15 1 0 32 13 2 1 34 15 etc etc etc etc 

Lo que estoy tratando de hacer es cargar esto, exactamente como está, en un dataframe de pandas pero solo where A==1 or 3 or 4

Hasta ahora solo puedo cargar el HDF5 completo usando:

 store = pd.HDFStore('Resutls2015_10_21.h5') df = pd.DataFrame(store['results_table']) 

No veo cómo incluir una condición where aquí.

El archivo hdf5 debe escribirse en formato de table (en lugar de en formato fixed ) para poder consultar con el pd.read_hdf de pd.read_hdf .

Además, A debe ser declarado como una columna de datos :

 df.to_hdf('/tmp/out.h5', 'results_table', mode='w', data_columns=['A'], format='table') 

o, para especificar todas las columnas como columnas de datos (consultables):

 df.to_hdf('/tmp/out.h5', 'results_table', mode='w', data_columns=True, format='table') 

Entonces podrías usar

 pd.read_hdf('/tmp/out.h5', 'results_table', where='A in [1,3,4]') 

para seleccionar filas donde el valor de la columna A es 1, 3 o 4. Por ejemplo,

 import numpy as np import pandas as pd df = pd.DataFrame({ 'A': [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2], 'B': [0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1], 'C': [34, 32, 35, 34, 31, 34, 29, 34, 12, 34, 32, 34], 'D': [11, 15, 22, 15, 9, 15, 11, 15, 14, 15, 13, 15]}) df.to_hdf('/tmp/out.h5', 'results_table', mode='w', data_columns=['A'], format='table') print(pd.read_hdf('/tmp/out.h5', 'results_table', where='A in [1,3,4]')) 

rendimientos

  ABCD 0 1 0 34 11 2 3 1 35 22 3 4 1 34 15 5 1 0 34 15 7 3 0 34 15 8 4 1 12 14 10 1 0 32 13 

Si tiene una lista muy larga de valores, vals , entonces podría usar el formato de cadena para componer el argumento de la derecha:

 where='A in {}'.format(vals) 

Puede hacer esto utilizando pandas.read_hdf ( aquí ), con el parámetro opcional de where .
Por ejemplo : read_hdf('store_tl.h5', 'table', where = ['index>2'])