问题:
你好,
在搜索选择数据框的方法时(对 Pandas 相对缺乏经验),我有以下问题:
对于大型数据集,什么更快 - .isin() 或 .query()?
Query 阅读起来更直观一些,因此由于我的工作,我更喜欢这种方法。但是,在一个非常小的示例数据集上对其进行测试,查询似乎要慢得多。
有没有人以前正确测试过这个?如果有,结果如何?我搜索了网络,但找不到关于此的其他帖子。
请参阅下面的示例代码,它适用于 Python 3.8.5。
非常感谢您的帮助!
代码:
# Packages
import pandas as pd
import timeit
import numpy as np
# Create dataframe
df = pd.DataFrame({'name': ['Foo', 'Bar', 'Faz'],
'owner': ['Canyon', 'Endurace', 'Bike']},
index=['Frame', 'Type', 'Kind'])
# Show dataframe
df
# Create filter
selection = ['Canyon']
# Filter dataframe using 'isin' (type 1)
df_filtered = df[df['owner'].isin(selection)]
%timeit df_filtered = df[df['owner'].isin(selection)]
213 µs ± 14 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
# Filter dataframe using 'isin' (type 2)
df[np.isin(df['owner'].values, selection)]
%timeit df_filtered = df[np.isin(df['owner'].values, selection)]
128 µs ± 3.11 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
# Filter dataframe using 'query'
df_filtered = df.query("owner in @selection")
%timeit df_filtered = df.query("owner in @selection")
1.15 ms ± 9.35 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)