Python HDF存储选择\u作为\u多个生成器
问题:如何创建允许在HDFStore对象中的多个列上进行迭代的生成器 我正在尝试为一个HDFStore对象创建一个包装器类。我正在尝试实现的一个特性是能够以给定的chunksize在HDFStore中的列组上进行迭代。许多机器学习算法可以在线操作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
,
,不需要一次获取所有数据
我的第一次尝试是创建一个生成器函数,并将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