web-dev-qa-db-fra.com

Pandas ne peut pas lire le fichier hdf5 créé avec h5py

J'obtiens une erreur pandas lorsque j'essaie de lire les fichiers au format HDF5 que j'ai créés avec h5py. Je me demande si je fais juste quelque chose de mal?

import h5py
import numpy as np
import pandas as pd
h5_file = h5py.File('test.h5', 'w')
h5_file.create_dataset('zeros', data=np.zeros(shape=(3, 5)), dtype='f')
h5_file.close()
pd_file = pd.read_hdf('test.h5', 'zeros')

donne une erreur: TypeError: impossible de créer un stockeur si l'objet n'existe pas ou si une valeur est passée

J'ai essayé de spécifier le jeu de clés sur '/ zéros' (comme je le ferais avec h5py lors de la lecture du fichier) sans succès.

Si j'utilise pandas.HDFStore pour le lire, je reçois un magasin vide:

store = pd.HDFStore('test.h5')
>>> store
<class 'pandas.io.pytables.HDFStore'>
File path: test.h5
Empty

Je n'ai aucun problème à lire le fichier créé avec h5py:

h5_back = h5py.File('test.h5', 'r')
h5_back['/zeros']
<HDF5 dataset "zeros": shape (3, 5), type "<f4">

En utilisant ces versions:

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 23 2015, 02:52:03) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin

pd.__version__
'0.16.2'
h5py.__version__
'2.5.0'

Merci d'avance, Masha

18
Masha L.

J'ai un peu travaillé sur le module pytables dans pandas.io et d'après ce que je sais pandas l'interaction avec les fichiers HDF est limitée à des structures spécifiques que pandas comprend. Pour voir à quoi elles ressemblent, vous pouvez essayer

import pandas as pd
import numpy as np
pd.Series(np.zeros((3,5),dtype=np.float32).to_hdf('test.h5','test')

Si vous ouvrez 'test.h5' dans HDFView , vous verrez un chemin /test avec 4 éléments nécessaires pour recréer le DataFrame.

HDFView of test.h5

Je pense donc que votre seule option pour lire dans les tableaux NumPy est de les lire directement, puis de les convertir en objets Pandas.

14
Kevin S