我有一个包含数百万行的pandas数据帧df,以及列A1,...,AN
选择行df['A1']==30
?
编辑:至少有三种方法:
df[(df['A1']==30)]
df.query('A1==30')
df = df.set_index(A1)
一次;然后df.loc[30]
(或df.loc[x]
我们尝试在A1列中找到所有x值。有什么优点和缺点?
答案 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)