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 strip lstrip rstrip使用方法
Sep 06 Python
在Windows8上的搭建Python和Django环境
Jul 03 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
May 29 Python
Python for循环生成列表的实例
Jun 15 Python
值得收藏,Python 开发中的高级技巧
Nov 23 Python
Python当中的array数组对象实例详解
Jun 12 Python
pyqt5与matplotlib的完美结合实例
Jun 21 Python
Python PIL图片添加字体的例子
Aug 22 Python
分享PyCharm的几个使用技巧
Nov 10 Python
Python如何生成xml文件
Jun 04 Python
Python如何实现大型数组运算(使用NumPy)
Jul 24 Python
python实现会员信息管理系统(List)
Mar 18 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
十天学会php之第七天
2006/10/09 PHP
一个用于网络的工具函数库
2006/10/09 PHP
默默小谈PHP&amp;MYSQL分页原理及实现
2007/01/02 PHP
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
推荐几个开源的微信开发项目
2014/12/28 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
jQuery 方法大全方便学习参考
2010/02/25 Javascript
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
JavaScript全局函数使用简单说明
2011/03/11 Javascript
json2.js的初步学习与了解
2011/10/06 Javascript
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
使用ionic在首页新闻中应用到的跑马灯效果的实现方法
2017/02/13 Javascript
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
JavaScript设计模式之构造函数模式实例教程
2018/07/02 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
详解Python中的__getitem__方法与slice对象的切片操作
2016/06/27 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
自定义django admin model表单提交的例子
2019/08/23 Python
Python实现投影法分割图像示例(一)
2020/01/17 Python
Python基于QQ邮箱实现SSL发送
2020/04/26 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
2020/06/03 Python
使用python实现学生信息管理系统
2021/02/25 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
PHP数据运算类型都有哪些
2013/11/05 面试题
港湾网络笔试题
2014/04/19 面试题
高级人员简历的自我评价分享
2013/11/03 职场文书
信息服务专业毕业生求职信
2014/03/02 职场文书
冬季施工防火方案
2014/05/17 职场文书
单方离婚协议书范本(2014版)
2014/09/30 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
Python采集股票数据并制作可视化柱状图
2022/04/04 Python
Consul在linux环境的集群部署
2022/04/08 Servers