Python 如何从熊猫HDF存储中读取nrows?

Python 如何从熊猫HDF存储中读取nrows?,python,python-3.x,pandas,hdf5,Python,Python 3.x,Pandas,Hdf5,我想做什么 pd.read\u csv。。。nrows=可以读取文件的顶部nrows。我想在使用pd.read\u hdf时也这样做 有什么问题 我被这件事弄糊涂了。启动和停止看起来像我需要的,但当我尝试时,返回ValueError。我尝试的第二件事是使用nrows=10,认为它可能是一个允许的**kwargs。当我这样做时,不会抛出错误,但也会返回完整的数据集,而不是仅返回10行 问题:如何正确地从HDF文件中读取较小的行子集?编辑:不必先把整个内容读入内存 以下是我的互动环节: >&g

我想做什么

pd.read\u csv。。。nrows=可以读取文件的顶部nrows。我想在使用pd.read\u hdf时也这样做

有什么问题

我被这件事弄糊涂了。启动和停止看起来像我需要的,但当我尝试时,返回ValueError。我尝试的第二件事是使用nrows=10,认为它可能是一个允许的**kwargs。当我这样做时,不会抛出错误,但也会返回完整的数据集,而不是仅返回10行

问题:如何正确地从HDF文件中读取较小的行子集?编辑:不必先把整个内容读入内存

以下是我的互动环节:

>>> import pandas as pd
>>> df = pd.read_hdf('storage.h5')
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    df = pd.read_hdf('storage.h5')
  File "C:\Python35\lib\site-packages\pandas\io\pytables.py", line 367, in read_hdf
    raise ValueError('key must be provided when HDF5 file '
ValueError: key must be provided when HDF5 file contains multiple datasets.
>>> import h5py
>>> f = h5py.File('storage.h5', mode='r')
>>> list(f.keys())[0]
'table'
>>> f.close()
>>> df = pd.read_hdf('storage.h5', key='table', start=0, stop=10)
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    df = pd.read_hdf('storage.h5', key='table', start=0, stop=10)
  File "C:\Python35\lib\site-packages\pandas\io\pytables.py", line 370, in read_hdf
    return store.select(key, auto_close=auto_close, **kwargs)
  File "C:\Python35\lib\site-packages\pandas\io\pytables.py", line 740, in select
    return it.get_result()
  File "C:\Python35\lib\site-packages\pandas\io\pytables.py", line 1447, in get_result
    results = self.func(self.start, self.stop, where)
  File "C:\Python35\lib\site-packages\pandas\io\pytables.py", line 733, in func
    columns=columns, **kwargs)
  File "C:\Python35\lib\site-packages\pandas\io\pytables.py", line 2890, in read
    return self.obj_type(BlockManager(blocks, axes))
  File "C:\Python35\lib\site-packages\pandas\core\internals.py", line 2795, in __init__
    self._verify_integrity()
  File "C:\Python35\lib\site-packages\pandas\core\internals.py", line 3006, in _verify_integrity
    construction_error(tot_items, block.shape[1:], self.axes)
  File "C:\Python35\lib\site-packages\pandas\core\internals.py", line 4280, in construction_error
    passed, implied))
ValueError: Shape of passed values is (614, 593430), indices imply (614, 10)
>>> df = pd.read_hdf('storage.h5', key='table', nrows=10)
>>> df.shape
(593430, 614)
收到一个TypeError,指示固定格式存储默认格式值df.to_hdf…:


这是否意味着如果格式为固定格式,则无法选择行的子集?

我遇到了相同的问题。到现在为止,我非常确定这正是问题所在。这是一张2015年的门票,其中包含一份复印件。Jeff Reback认为这实际上是一个bug,他甚至在2015年为我们指出了一个解决方案。只是还没有人构建出解决方案。我可能会尝试一下。

现在似乎可以了,至少在熊猫1.0.1上是这样。只需提供开始和停止参数:

df = pd.read_hdf('test.h5', '/floats/trajectories', start=0, stop=5)

我不认为nrows是一个有效的选项,read_hdf只是忽略了它。我处理hdf文件的首选方法是使用store=pd.HDFStorefilename,然后使用类似store['table'].iloc[:10,:]的东西。如果我没记错的话,在您实际索引数组之前,这不会将数据加载到内存中,因此只加载10行。@GergesDib这非常有用。我暂时走那条路线。但我的好奇心依然存在:如何使用read_hdf实现它。。。所以我将这个问题留待讨论。对我来说,stop=10就像预期的那样工作:读取前10行。
TypeError: cannot pass a where specification when reading from a
  Fixed format store. this store must be selected in its entirety
df = pd.read_hdf('test.h5', '/floats/trajectories', start=0, stop=5)