首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HDFStore select_as_multiple发生器

HDFStore select_as_multiple发生器
EN

Stack Overflow用户
提问于 2013-03-17 16:28:31
回答 1查看 844关注 0票数 1

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

我正在尝试为一个熊猫HDFStore对象创建一个包装类。我正在尝试实现的特性之一是能够按给定的块大小迭代HDFStore中的列组。许多机器学习算法可以操作on-line,而不需要同时使用所有的数据。

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

代码语言:javascript
复制
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

这很好,而且我能够在存储中的单个存储列上迭代。注意,为了测试,我将每一列存储在它自己的表中。

我的下一步是使用HDFStore.select_as_multiple将这个概念扩展到多个表的多个列。虽然没有在docstring中,但select_as_multiple似乎也接受开始和停止参数:

代码语言:javascript
复制
>>> store.select_as_multiple(keys='MachineID', start=0, stop=50000)

<class 'pandas.core.frame.DataFrame'>
Int64Index: 50000 entries, 0 to 49999
Data columns:
MachineID    50000  non-null values
dtypes: int64(1)

根据请求,只返回50 000行。但是,当我传递超过一个键/列时,该方法会将所有行撤回:

代码语言:javascript
复制
>>> 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_as_multiple来提取指定范围的行而不是所有行?

版本信息:

代码语言:javascript
复制
>>> pd.__version__
'0.10.1'

>>> tables.__version__
'2.4.0'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-17 18:55:44

它不能工作,因为没有将开始/停止传递给基础选择。很容易解决。

还意味着添加迭代器支持,以窃取您的功能:)

done https://github.com/pydata/pandas/issues/3078

有文档,但本质上是:

代码语言:javascript
复制
for df in store.select('df',chunksize=10000):
    print df
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15463183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档