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中解析XML数据的方法
Oct 15 Python
Python聚类算法之DBSACN实例分析
Nov 20 Python
浅谈python import引入不同路径下的模块
Jul 11 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
Jan 11 Python
用Eclipse写python程序
Feb 10 Python
python字典值排序并取出前n个key值的方法
Oct 17 Python
python实现栅栏加解密 支持密钥加密
Mar 20 Python
Python GUI学习之登录系统界面篇
Aug 21 Python
Pytorch之contiguous的用法
Dec 31 Python
详解Selenium 元素定位和WebDriver常用方法
Dec 04 Python
python爬取某网站原图作为壁纸
Jun 02 Python
python基础入门之普通操作与函数(三)
Jun 13 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 高级课程笔记 面向对象
2009/06/21 PHP
PHP中filter函数校验数据的方法详解
2015/07/31 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
php用户登录之cookie信息安全分析
2016/05/13 PHP
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
关于jquery中attr()和prop()方法的区别
2018/05/28 jQuery
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
vue路由教程之静态路由
2019/09/03 Javascript
JavaScript实现图片上传并预览并提交ajax
2019/09/30 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
解析Python中的__getitem__专有方法
2016/06/27 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
python+opencv实现高斯平滑滤波
2020/07/21 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
2020/02/26 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
pytorch 把图片数据转化成tensor的操作
2021/03/04 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
英国在线发型和美容产品商店:Beauty Cutie
2019/04/27 全球购物
车辆维修工自我评价怎么写
2013/09/20 职场文书
敬老文明号事迹材料
2014/01/16 职场文书
升学宴主持词
2014/04/02 职场文书
网页美工求职信范文
2014/04/17 职场文书
班主任评语大全
2014/04/26 职场文书
小学雷锋月活动总结
2014/07/03 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
学校班子个人对照检查材料思想汇报
2014/09/27 职场文书
党的作风建设心得体会
2014/10/22 职场文书
从严治党主题教育活动总结
2015/05/07 职场文书
写好求职信的技巧解密
2019/05/14 职场文书
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python
浅析Python中的随机采样和概率分布
2021/12/06 Python