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
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
.
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.