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测试驱动开发实例
Oct 08 Python
Python中的urllib模块使用详解
Jul 07 Python
Python基础教程之tcp socket编程详解及简单实例
Feb 23 Python
Python 实现链表实例代码
Apr 07 Python
python实现感知器算法详解
Dec 19 Python
浅谈Python中的作用域规则和闭包
Mar 20 Python
利用Python进行数据可视化常见的9种方法!超实用!
Jul 11 Python
python命令行参数用法实例分析
Jun 25 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
Aug 21 Python
python求平均数、方差、中位数的例子
Aug 22 Python
用python拟合等角螺线的实现示例
Dec 27 Python
对Matlab中共轭、转置和共轭装置的区别说明
May 11 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
一个简单的MySQL数据浏览器
2006/10/09 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
2014/07/02 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
JavaScript Perfection kill 测试及答案
2010/03/23 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
JavaScript解析json格式数据简单示例
2014/12/09 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
以WordPress为例讲解jQuery美化页面Title的方法
2016/05/23 Javascript
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
Python多图片合并PDF的方法
2019/01/03 Python
Python实现的拉格朗日插值法示例
2019/01/08 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
python 实现端口扫描工具
2020/12/18 Python
python中pivot()函数基础知识点
2021/01/03 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
html5 canvas实现给图片添加平铺水印
2019/08/20 HTML / CSS
互动出版网:专业书籍
2017/03/21 全球购物
汉森批发:Hansen Wholesale
2018/05/24 全球购物
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
护士实习鉴定范文
2013/12/22 职场文书
汽车机修工岗位职责
2014/03/06 职场文书
GMP办公室主任岗位职责
2014/03/14 职场文书
开业庆典主持词
2014/03/21 职场文书
单身申明具结书
2015/02/26 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
Oracle 数据仓库ETL技术之多表插入语句的示例详解
2021/04/12 Oracle
关于html选择框创建占位符的问题
2021/06/09 HTML / CSS