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 thread 并发且顺序运行示例
Apr 09 Python
python集合类型用法分析
Apr 08 Python
Python之ReportLab绘制条形码和二维码的实例
Jan 15 Python
Python单元测试简单示例
Jul 03 Python
浅谈解除装饰器作用(python3新增)
Oct 15 Python
python实现小球弹跳效果
May 10 Python
关于Python作用域自学总结
Jun 10 Python
梅尔倒谱系数(MFCC)实现
Jun 19 Python
在python中创建指定大小的多维数组方式
Nov 28 Python
解析Python 偏函数用法全方位实现
Jun 26 Python
python 实现关联规则算法Apriori的示例
Sep 30 Python
python基于win32api实现键盘输入
Dec 09 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
Zend的MVC机制使用分析(二)
2013/05/02 PHP
使用PHP生成PDF方法详解
2015/01/23 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
JS实现给对象动态添加属性的方法
2017/01/05 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
使用svg实现动态时钟效果
2018/07/17 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
Element Input组件分析小结
2018/10/11 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
JS数组的高级使用方法示例小结
2020/03/14 Javascript
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
Python中的choice()方法使用详解
2015/05/15 Python
Python算法应用实战之栈详解
2017/02/04 Python
Python遍历某目录下的所有文件夹与文件路径
2018/03/15 Python
在python中用url_for构造URL的方法
2019/07/25 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
pytorch判断是否cuda 判断变量类型方式
2020/06/23 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
英国时尚和家居用品零售商:Matalan
2021/02/28 全球购物
销售人员中英文自荐信
2013/09/22 职场文书
协议书格式
2014/04/23 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
篮球赛新闻稿
2015/07/17 职场文书
校长新学期寄语2016
2015/12/04 职场文书
《桂花雨》教学反思
2016/02/19 职场文书
python实现三阶魔方还原的示例代码
2021/04/28 Python
详解MindSpore自定义模型损失函数
2021/06/30 Python
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL