¿Cómo debo usar h5py lib para almacenar datos de series de tiempo?

Tengo algunos datos de series de tiempo que previamente almacené como archivos pytables usando pytables . Recientemente he intentado almacenar lo mismo con h5py lib. Sin embargo, dado que todos los elementos de la matriz numpy tienen que ser del mismo tipo de letra, debo convertir la fecha (que generalmente es el índice) en el tipo ‘ float64 ‘ antes de almacenarlo utilizando h5py lib. Cuando uso pytables , el índice y su tipo de letra se conservan, lo que me permite consultar las series de tiempo sin necesidad de extraerlas todas en la memoria. Supongo que con h5py eso no es posible. ¿Me estoy perdiendo de algo? Y si no, ¿en qué situaciones debo usar h5py lib para almacenar datos de series de tiempo? Hago esta pregunta porque la claridad en esto podría ayudarme a diseñar un proyecto más eficiente (de procesamiento y almacenamiento).

A continuación se muestra el código simple, donde tengo que perder la información del índice para almacenarlo como un único objeto de tipo dty

 dt_range = pd.date_range('2016-12-01','2016-12-10') data = np.arange(0,20).reshape(-1,2) df = pd.DataFrame(data,index = dt_range, columns = list('ab'), dtype = 'float') df.index = df.index.to_julian_date() df = df.reset_index() h = h5py.File(r'path\temp.h5', 'w') dset = h.create_dataset('temp',data = df.values, shape = (10,3)) 

Yo uso pandas to_hdf

 dt_range = pd.date_range('2016-12-01','2016-12-10') data = np.arange(0,20).reshape(-1,2) df = pd.DataFrame(data,index = dt_range, columns = list('ab'), dtype = 'float') df.index = df.index.to_julian_date() df = df.reset_index() with pd.HDFStore('temp.h5', 'w') as h: df.to_hdf(h, 'temp') pd.read_hdf('temp.h5', 'temp') 

introduzca la descripción de la imagen aquí

Cuando @piRSquared código @piRSquared , y veo el archivo con h5py , veo:

 In [4]: import h5py In [5]: f=h5py.File('temp.h5') In [8]: list(f.keys()) Out[8]: ['temp'] In [9]: f['temp'] Out[9]:  In [10]: list(f['temp'].keys()) Out[10]: ['axis0', 'axis1', 'block0_items', 'block0_values'] In [11]: f['temp']['axis0'][:] Out[11]: array([b'index', b'a', b'b'], dtype='|S5') In [12]: f['temp']['axis1'][:] Out[12]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64) In [13]: f['temp']['block0_items'][:] Out[13]: array([b'index', b'a', b'b'], dtype='|S5') In [14]: f['temp']['block0_values'][:] Out[14]: array([[ 2.45772350e+06, 0.00000000e+00, 1.00000000e+00], [ 2.45772450e+06, 2.00000000e+00, 3.00000000e+00], [ 2.45772550e+06, 4.00000000e+00, 5.00000000e+00], [ 2.45772650e+06, 6.00000000e+00, 7.00000000e+00], [ 2.45772750e+06, 8.00000000e+00, 9.00000000e+00], [ 2.45772850e+06, 1.00000000e+01, 1.10000000e+01], [ 2.45772950e+06, 1.20000000e+01, 1.30000000e+01], [ 2.45773050e+06, 1.40000000e+01, 1.50000000e+01], [ 2.45773150e+06, 1.60000000e+01, 1.70000000e+01], [ 2.45773250e+06, 1.80000000e+01, 1.90000000e+01]]) 

Así que ha guardado la información de indexación en 3 series y los valores en otra, que se carga como una matriz numpy 2d.

Es el mismo tipo de información que esperaría ver en un archivo creado por pytables .

Según su documentación, pd.HDFStore está utilizando pytables .