2017-02-22 56 views
1

给出一个包含有一个熊猫HDFStore之间差异DataFrame熊猫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']) 

不过,我可以回落到那种命令的,如果我是使用纯DataFrame,这不是在HDFStore我可能会用得到的结果相同:

store.df[(store.df.a > 0) & (store.df.b > 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,那么你就需要根据逻辑都和选择。只有,那么你需要应用最终的过滤器。 选择而不是访问数据只有一次!