gpt4 book ai didi

python - Pandas 索引过滤器比非索引列过滤器慢

转载 作者:行者123 更新时间:2023-11-30 22:21:21 25 4
gpt4 key购买 nike

我对两个 Pandas 查询进行了计时,希望通过索引实现更高的速度。然而,相反的情况发生了。有人可以解释这是为什么吗?或者我所做的事情是否是错误的?我的理解是,Pandas 索引作为哈希表工作,查找会在恒定时间内发生。就行过滤而言,我认为这是一个顺序过滤,每次应用过滤器时,都会扫描数据帧中的所有行。

该数据集大约有 800 万行和 7 列。我正在尝试按数据不唯一的列中的字符串值组合进行过滤。

In [1]: import pandas as pd

In [2]: df = pd.read_csv("/path/to/file", header=None, sep='\t', usecols=[0,1,2,3,5,6,7], names=['A', 'B', 'C', 'D', 'E', 'F', 'G'])

In [3]: %timeit -n10 df[df['B'].isin(['S1', 'S2'])]
10 loops, best of 3: 145 ms per loop

In [4]: df.dtypes
Out[4]:
A object
B object
C int64
D int64
E float64
F float64
G object
dtype: object

In [5]: df.shape
Out[5]: (8468828, 7)

索引后:

In [4]: df2 = pd.read_csv("/path/to/file", header=None, sep='\t', usecols=[0,1,2,3,5,6,7], names=['A', 'B', 'C', 'D', 'E', 'F', 'G'])

In [5]: df2.set_index('B', inplace=True)

In [6]: %timeit -n10 df2.loc[['S1', 'S2']]
10 loops, best of 3: 302 ms per loop

最佳答案

@HYRY's explanation关于 pandas 中如何处理索引的信息非常丰富:

When index is unique, pandas use a hashtable to map key to value O(1). When index is non-unique and sorted, pandas use binary search O(log N), when index is random ordered pandas need to check all the keys in the index O(N).

关于python - Pandas 索引过滤器比非索引列过滤器慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48668306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com