Pandas探索之高性能函数eval和query解析


Posted in Python onOctober 28, 2017

Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

相较于 Python 的内置函数, Pandas 库为我们提供了一系列性能更高的数据处理函数,本节将向大家介绍 Pandas 库中的高性能函数 eval 与 query:

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

import numpy as np 
rng = np.random.RandomState(42) 
x = rng.rand(1E6) 
y = rng.rand(1E6) 
%timeit x + y 
100 loops, best of 3: 3.39 ms per loop

利用 Numpy 中的 fromiter 函数我们可以得到相同的一维数组,然而我们发现,这个语句的性能并不比内置的数组加法好。

%timeit np.fromiter((xi + yi for xi, yi in zip(x, y)), 
dtype=x.dtype, count=len(x)) 
1 loop, best of 3: 266 ms per loop

再比如,进行某一项条件的判断:

mask = (x > 0.5) & (y < 0.5) 
tmp1 = (x > 0.5) 
tmp2 = (y < 0.5) 
mask = tmp1 & tmp2

Numpy 库中的函数 allclose 用于判断两个数组是否相等,我们可以看到,使用 numexpr 库中的 evaluate 函数同样可以实现 mask 中的条件判断。

import numexpr 
mask_numexpr = numexpr.evaluate('(x > 0.5) & (y < 0.5)') 
np.allclose(mask, mask_numexpr) 
True

面对同样的问题,Pandas 库为我们提供了更高性能的解决方案, eval 函数能够将特定形式的字符串转换为对应含义的逻辑判断或运算,比 Python 的内置函数具有更好的算法效率:

import pandas as pd 
nrows, ncols = 100000, 100 
rng = np.random.RandomState(42) 
df1, df2, df3, df4 = (pd.DataFrame(rng.rand(nrows, ncols)) 
for i in range(4)) 
%timeit df1 + df2 + df3 + df4 
10 loops, best of 3: 87.1 ms per loop 
%timeit pd.eval('df1 + df2 + df3 + df4') 
10 loops, best of 3: 42.2 ms per loop 
np.allclose(df1 + df2 + df3 + df4, 
pd.eval('df1 + df2 + df3 + df4')) 
True

可以看到,eval 函数实现了等价的计算,并且具有更高的性能。除了加法运算,Pandas 的函数 eval 还能帮助我们实现其他多种复杂的逻辑判断或计算:

总结

以上就是本文关于Pandas探索之高性能函数eval和query解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Python探索之URL Dispatcher实例详解、Python编程之Re模块下的函数介绍等,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
用Python实现斐波那契(Fibonacci)函数
Mar 25 Python
Python爬虫常用小技巧之设置代理IP
Sep 13 Python
在Python中居然可以定义两个同名通参数的函数
Jan 31 Python
python 多线程重启方法
Feb 18 Python
Django中提供的6种缓存方式详解
Aug 05 Python
Python imread、newaxis用法详解
Nov 04 Python
python dataframe NaN处理方式
Dec 26 Python
关于python pycharm中输出的内容不全的解决办法
Jan 10 Python
使用Python FastAPI构建Web服务的实现
Jun 08 Python
Python使用Selenium实现淘宝抢单的流程分析
Jun 23 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
Jul 09 Python
浅谈matplotlib 绘制梯度下降求解过程
Jul 12 Python
Python探索之URL Dispatcher实例详解
Oct 28 #Python
Python探索之Metaclass初步了解
Oct 28 #Python
Python编程之Re模块下的函数介绍
Oct 28 #Python
Python探索之静态方法和类方法的区别详解
Oct 27 #Python
Python探索之爬取电商售卖信息代码示例
Oct 27 #Python
Python 列表理解及使用方法
Oct 27 #Python
Python算法之求n个节点不同二叉树个数
Oct 27 #Python
You might like
this[] 指的是什么内容 讨论
2007/03/24 Javascript
js实现的标题栏新消息闪烁提示效果
2014/06/06 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
nodejs实现邮件发送服务实例分享
2017/03/29 NodeJs
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
生成无限制的微信小程序码的示例代码
2019/09/20 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
VSCode 配置uni-app的方法
2020/07/11 Javascript
微信小程序实现时间戳格式转换
2020/07/20 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
盘点提高 Python 代码效率的方法
2014/07/03 Python
Python实现的归并排序算法示例
2017/11/21 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
Python获取时间戳代码实例
2019/09/24 Python
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
关于Java String的一道面试题
2013/09/29 面试题
智能电子应届生求职信
2013/11/10 职场文书
心得体会怎么写
2013/12/30 职场文书
公司年会搞笑主持词
2014/03/24 职场文书
公司总经理任命书
2014/06/05 职场文书
法人身份证明书
2014/10/08 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
王兆力在市委党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
2016年春节慰问信息大全
2015/11/30 职场文书
小程序实现文字循环滚动动画
2021/06/14 Javascript
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL
ubuntu下常用apt命令介绍
2022/06/05 Servers