【问题标题】:Pandas HDFStore: difference between using the select function and direct accessPandas HDFStore:使用选择功能和直接访问的区别
【发布时间】:2017-07-12 12:18:50
【问题描述】:

给定一个包含 DataFrame 的 pandas HDFStore:

import pandas as pd
import numpy.random as rd

df = pd.DataFrame(rd.randn(int(1000)).reshape(500, 2), columns=list('ab'))
store = pd.HDFStore('store.h5')
store.append('df', df, data_columns=['a', 'b'])

我可以使用select 函数来检索数据的子集,如下所示:

store.select('df', ['a > 0', 'b > 0'])

但是,如果我使用不在HDFStore 中的普通DataFrame,我可以通过回退到我可能使用的那种命令来获得相同的输出:

store.df[(store.df.a > 0) & (store.df.b > 0)]

这两种方法有区别吗?如果有,有什么区别?

【问题讨论】:

    标签: python python-2.7 pandas hdfstore


    【解决方案1】:

    如果您运行一些基准测试,您会发现以下内容

    %timeit store.select('df', ['a > 0', 'b > 0'])
    100 loops, best of 3: 2.63 ms per loop
    %timeit store.df[(store.df.a > 0) & (store.df.b > 0)]
    100 loops, best of 3: 6.01 ms per loop
    

    这表明第一个 select 访问文件的次数比第二种方法少。 具体如下各项

    %timeit store.df.a > 0
    100 loops, best of 3: 1.84 ms per loop
    %timeit store.df.b > 0
    1000 loops, best of 3: 1.82 ms per loop
    

    大约需要2ms,然后你需要根据两者的逻辑AND来选择。只有,然后您需要应用最终过滤器。 select 只访问一次数据!

    【讨论】:

      猜你喜欢
      • 2013-12-28
      • 1970-01-01
      • 2015-06-12
      • 2011-09-10
      • 2014-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      相关资源
      最近更新 更多