gpt4 book ai didi

python - Pandas 数据框 : loc vs query performance

转载 作者:太空狗 更新时间:2023-10-29 20:46:47 27 4
gpt4 key购买 nike

我在 python 中有 2 个数据帧,我想查询数据。

  • DF1:4M 条记录 x 3 列。查询功能接缝更多比 loc 函数更高效。

  • DF2:2K 条记录 x 6 列。 loc 函数接缝更多比查询功能更高效。

两个查询都返回一条记录。通过在循环中运行相同的操作 10K 次来完成模拟。

运行 python 2.7 和 pandas 0.16.0

有什么提高查询速度的建议吗?

最佳答案

为了提高性能可以使用 numexpr:

import numexpr

np.random.seed(125)
N = 40000000
df = pd.DataFrame({'A':np.random.randint(10, size=N)})

def ne(df):
x = df.A.values
return df[numexpr.evaluate('(x > 5)')]
print (ne(df))

In [138]: %timeit (ne(df))
1 loop, best of 3: 494 ms per loop

In [139]: %timeit df[df.A > 5]
1 loop, best of 3: 536 ms per loop

In [140]: %timeit df.query('A > 5')
1 loop, best of 3: 781 ms per loop

In [141]: %timeit df[df.eval('A > 5')]
1 loop, best of 3: 770 ms per loop

import numexpr
np.random.seed(125)

def ne(x):
x = x.A.values
return x[numexpr.evaluate('(x > 5)')]

def be(x):
return x[x.A > 5]

def q(x):
return x.query('A > 5')

def ev(x):
return x[x.eval('A > 5')]


def make_df(n):
df = pd.DataFrame(np.random.randint(10, size=n), columns=['A'])
return df


perfplot.show(
setup=make_df,
kernels=[ne, be, q, ev],
n_range=[2**k for k in range(2, 25)],
logx=True,
logy=True,
equality_check=False,
xlabel='len(df)')

graph

编辑:

修改后的 ne 和改进的 be 的图:

def ne(x):
return x[numexpr.evaluate('(x > 5)')]

def bex(x):
return x[x.A.values > 5]

enter image description here

关于python - Pandas 数据框 : loc vs query performance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49936557/

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