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 (2)
Oct 31 Python
Python解释执行原理分析
Aug 22 Python
Python中对元组和列表按条件进行排序的方法示例
Nov 10 Python
使用python实现rsa算法代码
Feb 17 Python
python常用函数详解
Sep 13 Python
python实现旋转和水平翻转的方法
Oct 25 Python
Python+Pyqt实现简单GUI电子时钟
Feb 22 Python
Python API自动化框架总结
Nov 12 Python
pytorch 常用线性函数详解
Jan 15 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
python 高阶函数简单介绍
Feb 19 Python
Python实现老照片修复之上色小技巧
Oct 16 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
造就帕卡马拉的帕卡斯是怎么被发现的
2021/03/03 咖啡文化
一个简单的网页密码登陆php代码
2012/07/17 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
js继承的实现代码
2010/08/05 Javascript
js将iframe中控件的值传到主页面控件中的实现方法
2013/03/11 Javascript
如何使用Javascript获取距今n天前的日期
2013/07/08 Javascript
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
2015/11/17 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
浅谈ES6 模板字符串的具体使用方法
2017/11/07 Javascript
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
js实现动态增加文件域表单功能
2018/10/22 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
Python实现重建二叉树的三种方法详解
2018/06/23 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
python 用 xlwings 库 生成图表的操作方法
2019/12/22 Python
使用CSS变量实现炫酷惊人的悬浮效果
2019/04/26 HTML / CSS
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
公司庆典活动邀请函
2014/01/09 职场文书
《美丽的公鸡》教学反思
2014/02/25 职场文书
农村面貌改造提升实施方案
2014/03/18 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
师范类求职信
2014/06/21 职场文书
党员目标管理责任书
2014/07/25 职场文书
名人传读书笔记
2015/06/26 职场文书
警用民用对讲机找不同
2022/02/18 无线电
JS实现简单的九宫格抽奖
2022/06/28 Javascript