从pandas数据框中选择行的最快方法?

时间:2017-06-15 22:28:40

标签: python pandas dataframe

我有一个包含数百万行的pandas数据帧df,以及列A1,...,AN

选择行df['A1']==30

的最快方法是什么?

编辑:至少有三种方法:

  1. 方法1. df[(df['A1']==30)]
  2. 方法2. df.query('A1==30')
  3. 方法3.执行df = df.set_index(A1)一次;然后df.loc[30](或df.loc[x]我们尝试在A1列中找到所有x值。
  4. 有什么优点和缺点?

2 个答案:

答案 0 :(得分:4)

50万行和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 :(得分:1)

你看过Enhancing Performance了吗?从这里你会看到你从中获得了显着的加速,

df.query('A1==30')

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