Подтвердить что ты не робот

Pandas невозможно прочитать файл hdf5, созданный с помощью h5py

Я получаю ошибку pandas, когда пытаюсь читать файлы формата HDF5, созданные мной с помощью h5py. Интересно, я просто делаю что-то неправильно?

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')

дает ошибку: TypeError: невозможно создать хранилище, если объект не существует или не передано значение

Я попытался указать ключ, установленный в '/zeros' (как я делал бы это с h5py при чтении файла) без везения.

Если я использую pandas.HDFStore, чтобы прочитать его, я получаю пустое хранилище назад:

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

У меня нет проблем с чтением только что созданного файла с h5py:

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

Использование этих версий:

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'

Большое спасибо заранее, Маша

4b9b3361

Ответ 1

Я немного поработал над модулем pytables в pandas.io и из того, что я знаю pandas взаимодействие с файлами HDF ограничено конкретными структурами, которые понимает pandas. Чтобы увидеть, как они выглядят, вы можете попробовать

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

Если вы откроете 'test.h5' в HDFView, вы увидите путь /test с 4 элементами, которые необходимы для воссоздайте DataFrame.

HDFView of test.h5

Итак, я думаю, что ваш единственный вариант для чтения в массивах NumPy - это прочитать их напрямую, а затем преобразовать их в объекты pandas.