Pandas HDFStore:使用select功能和直接访问之间的区别

时间:2017-02-22 12:35:28

标签: python python-2.7 pandas hdfstore

鉴于pandas HDFStore包含DataFrame

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'])

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

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

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

1 个答案:

答案 0 :(得分: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

这表明第一个选择访问文件的次数少于第二种方法。 具体来说,以下各项

%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进行选择。只有,那么你需要应用最终的过滤器。 选择代替,只访问一次数据!