楼主: casey_c
2208 2

[程序分享] Pandas 中的高性能函数:eval 和 query [推广有奖]

  • 0关注
  • 10粉丝

博士生

92%

还不是VIP/贵宾

-

威望
0
论坛币
96 个
通用积分
2.1003
学术水平
2 点
热心指数
15 点
信用等级
2 点
经验
11502 点
帖子
278
精华
0
在线时间
94 小时
注册时间
2016-11-22
最后登录
2022-5-2

楼主
casey_c 发表于 2017-3-28 10:45:11 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
相较于 Python 的内置函数, Pandas 库为我们提供了一系列性能更高的数据处理函数,本节将向大家介绍 Pandas 库中的高性能函数 evalquery

在 Python 中,我们可以用很多种的方法来实现同样的目标,例如实现两个数组的相加:



  1. import numpy as np
  2. rng = np.random.RandomState(42)
  3. x = rng.rand(1E6)
  4. y = rng.rand(1E6)
  5. %timeit x + y
复制代码
100 loops, best of 3: 3.39 ms per loop
利用 Numpy 中的 fromiter 函数我们可以得到相同的一维数组,然而我们发现,这个语句的性能并不比内置的数组加法好。
  1. %timeit np.fromiter((xi + yi for xi, yi in zip(x, y)),
  2.                     dtype=x.dtype, count=len(x))
复制代码
1 loop, best of 3: 266 ms per loop
再比如,进行某一项条件的判断:
  1. mask = (x > 0.5) & (y < 0.5)
  2. tmp1 = (x > 0.5)
  3. tmp2 = (y < 0.5)
  4. mask = tmp1 & tmp2
复制代码
Numpy 库中的函数 allclose 用于判断两个数组是否相等,我们可以看到,使用 numexpr 库中的 evaluate 函数同样可以实现 mask 中的条件判断。
  1. import numexpr
  2. mask_numexpr = numexpr.evaluate('(x > 0.5) & (y < 0.5)')
  3. np.allclose(mask, mask_numexpr)
复制代码
True
面对同样的问题,Pandas 库为我们提供了更高性能的解决方案, eval 函数能够将特定形式的字符串转换为对应含义的逻辑判断或运算,比 Python 的内置函数具有更好的算法效率:
  1. import pandas as pd
  2. nrows, ncols = 100000, 100
  3. rng = np.random.RandomState(42)
  4. df1, df2, df3, df4 = (pd.DataFrame(rng.rand(nrows, ncols))
  5.                       for i in range(4))
复制代码
  1. %timeit df1 + df2 + df3 + df4
复制代码
10 loops, best of 3: 87.1 ms per loop
  1. %timeit pd.eval('df1 + df2 + df3 + df4')
复制代码
10 loops, best of 3: 42.2 ms per loop
  1. np.allclose(df1 + df2 + df3 + df4,
  2.             pd.eval('df1 + df2 + df3 + df4'))
复制代码
True
可以看到,eval 函数实现了等价的计算,并且具有更高的性能。除了加法运算,Pandas 的函数 eval 还能帮助我们实现其他多种复杂的逻辑判断或计算:
以上内容转自 数析学院,更多关于 eval 函数的使用方法以及 query 函数的调用,可以直接查看原文
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:pandas Query panda eval EVA

沙发
yandongwei 发表于 2017-3-29 16:44:42

藤椅
casey_c 发表于 2017-3-31 11:17:52

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-22 18:51