2017-02-22 36 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 

занимает около 2 мс, то вам необходимо выбрать в соответствии с логическим И обоих. Только, тогда вам нужно применить последний фильтр. Вместо выберите, получите доступ к данным только один раз!

 Смежные вопросы

  • Нет связанных вопросов^_^