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提取内容关键词的方法
Mar 16 Python
简单介绍Python中的readline()方法的使用
May 24 Python
在Django中管理Users和Permissions以及Groups的方法
Jul 23 Python
Python下载网络小说实例代码
Feb 03 Python
python中的二维列表实例详解
Jun 19 Python
Python实现的txt文件去重功能示例
Jul 07 Python
python爬取cnvd漏洞库信息的实例
Feb 14 Python
Python 日期区间处理 (本周本月上周上月...)
Aug 08 Python
Python 使用type来定义类的实现
Nov 19 Python
python 实现二维字典的键值合并等函数
Dec 06 Python
python爬虫分布式获取数据的实例方法
Nov 26 Python
上帝为你开了一扇窗之Tkinter常用函数详解
Jun 02 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
广播爱好者需要了解的天线知识
2021/03/01 无线电
ioncube_loader_win_5.2.dll的错误解决方法
2015/01/04 PHP
php生成过去100年下拉列表的方法
2015/07/20 PHP
使用composer 安装 laravel框架的方法图文详解
2019/08/02 PHP
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
JavaScript 动态添加表格行 使用模板、标记
2009/10/24 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
2015/06/05 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
原生js实现轮播图的示例代码
2017/02/20 Javascript
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
vue实现日历表格(element-ui)
2020/09/24 Javascript
js实现点击烟花特效
2020/10/14 Javascript
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
Python zip()函数用法实例分析
2018/03/17 Python
Python绘制的二项分布概率图示例
2018/08/22 Python
python的等深分箱实例
2019/11/22 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
职业生涯规划书基本格式
2014/01/06 职场文书
优秀毕业生推荐信范文
2014/03/07 职场文书
党课知识竞赛主持词
2014/04/01 职场文书
中层干部竞聘演讲稿
2014/05/15 职场文书
廉洁家庭事迹材料
2014/05/15 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
基层党组织整改方案
2014/10/25 职场文书
入党介绍人意见2015
2015/06/01 职场文书
Mybatis是这样防止sql注入的
2021/12/06 Java/Android
MySQL transaction事务安全示例讲解
2022/06/21 MySQL