Pandas数据框中选择行的最快方法是什么?

3

我有一个包含数百万行和A1,..., AN列的pandas数据框df。

选择使得 df['A1']==30 的行,最快的方法是什么?

注:至少有三种方法:

  1. 方法一:df[(df['A1']==30)]
  2. 方法二:df.query('A1==30')
  3. 方法三:执行 df = df.set_index(A1) 一次;然后使用 df.loc[30](或对于我们要定位在A1列中的所有x值,使用 df.loc[x]

它们各自的优缺点是什么?

2个回答

8

5000万行和52列

from string import ascii_letters

df = pd.DataFrame(np.random.randint(50, size=(50000000, 52)), columns=list(ascii_letters))

多种方法

%timeit df[df.B == 30]
%timeit df[df.B.values == 30]
%timeit df.query('B == 30')

1 loop, best of 3: 31.4 s per loop
1 loop, best of 3: 31.6 s per loop
1 loop, best of 3: 27.1 s per loop

使用numexpr
import numexpr as ne

%%timeit
B = df.B.values
df[ne.evaluate('B == 30')]

1 loop, best of 3: 22.8 s per loop

或者使用 numpy 切片以及 numexpr 重新构建整个内容。

%%timeit
B = df.B.values
mask = ne.evaluate('B == 30')
pd.DataFrame(df.values[mask], df.index[mask], df.columns)

1 loop, best of 3: 21.4 s per loop

1

您是否看过提高性能。从这里您将会发现通过以下方法可以获得显著的加速效果:

df.query('A1==30')

那个链接中有更多的信息,但我确信这是最容易实现的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接