Pandas无法读取使用h5py创建的hdf5文件

时间:2015-11-10 22:56:20

标签: python pandas hdf5 h5py

当我尝试读取用h5py创建的HDF5格式文件时,我得到了pandas错误。我想知道我是不是做错了什么?

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'

非常感谢, 马沙

1 个答案:

答案 0 :(得分:12)

我在pytables中的pandas.io模块上做了一点工作,据我所知,pandas与HDF文件的交互仅限于大熊猫理解的特定结构。要查看这些内容,您可以尝试

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

如果您在HDFView中打开“test.h5”,则会看到一条路径/test,其中包含重新创建DataFrame所需的4个项目。

HDFView of test.h5

所以我认为你在NumPy数组中读取的唯一选择是直接读取它们,然后将它们转换为Pandas对象。