Python HDF存储选择\u作为\u多个生成器

Python HDF存储选择\u作为\u多个生成器,python,pandas,generator,hdf5,Python,Pandas,Generator,Hdf5,问题:如何创建允许在HDFStore对象中的多个列上进行迭代的生成器 我正在尝试为一个HDFStore对象创建一个包装器类。我正在尝试实现的一个特性是能够以给定的chunksize在HDFStore中的列组上进行迭代。许多机器学习算法可以在线操作,,不需要一次获取所有数据 我的第一次尝试是创建一个生成器函数,并将start和stop参数传递给HDFStore的select方法: def iterate(self, key, chunksize=50000): node = self.st

问题:如何创建允许在HDFStore对象中的多个列上进行迭代的生成器

我正在尝试为一个HDFStore对象创建一个包装器类。我正在尝试实现的一个特性是能够以给定的chunksize在HDFStore中的列组上进行迭代。许多机器学习算法可以在线操作
,不需要一次获取所有数据

我的第一次尝试是创建一个生成器函数,并将start和stop参数传递给HDFStore的select方法:

def iterate(self, key, chunksize=50000):
    node = self.store.get_node(key)
    nrows = node.table.nrows
    current = 0
    while current < nrows:
        yield self.store.select(key, start=current, stop=current+chunksize)
        current += chunksize
按照要求,只返回了50000行。但是,当我传递了超过1个键/列时,该方法将收回所有行:

>>> store.select_as_multiple(keys=['MachineID','YearMade'], start=0, stop=50000)

<class 'pandas.core.frame.DataFrame'>
Int64Index: 401125 entries, 0 to 1124
Data columns:
MachineID    401125  non-null values
YearMade     401125  non-null values
dtypes: int64(2)

它不起作用,因为没有将开始/停止传递给基础select。很容易修复

还打算添加迭代器支持,这将窃取您的函数:)

完成

有文档,但本质上:

for df in store.select('df',chunksize=10000):
    print df

哇!我对这个了不起的项目的第一个贡献。谢谢你的帮助。完成了,请看上面的公关链接,请尝试一下,让我知道这是如何工作的。这尚未合并,但很快就会合并
>>> pd.__version__
'0.10.1'

>>> tables.__version__
'2.4.0'
for df in store.select('df',chunksize=10000):
    print df