Pandas HDFStore: разница между использованием функции выбора и прямого доступа

Учитывая панды 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 ответ

Решение

Если вы запустите какой-либо тест, вы найдете следующее

%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 мс, затем вам нужно выбрать в соответствии с логическим И обоих. Только тогда вам нужно применить финальный фильтр. Вместо этого выберите доступ к данным только один раз!

Другие вопросы по тегам