Pandas探索之高性能函数eval和query解析

 更新时间:2017年10月28日 11:13:32   作者:饭粒儿  
这篇文章主要介绍了Pandas探索之高性能函数eval和query解析,小编觉得还是挺不错的,这里分享给大家,供需要的朋友参考。

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模块下的函数介绍等,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

  • Jupyter Notebook中%time和%timeit的使用详解

    Jupyter Notebook中%time和%timeit的使用详解

    本文主要介绍了Jupyter Notebook中%time和%timeit的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python获取当前时间的方法

    Python获取当前时间的方法

    这篇文章主要介绍了Python获取当前时间的方法,有需要的朋友可以参考一下
    2014-01-01
  • Python实现进度条和时间预估的示例代码

    Python实现进度条和时间预估的示例代码

    这篇文章主要介绍了Python实现进度条和时间预估的代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Python实现随机游走的示例代码

    Python实现随机游走的示例代码

    随机游走是一个数学对象,称为随机或随机过程,它描述了一条路径,该路径由一些数学空间上的一系列随机步骤组成,下面我们就来学习一下Python如何实现随机游走的吧
    2023-12-12
  • python用PyInstaller打包成windows可执行的exe(细致版)

    python用PyInstaller打包成windows可执行的exe(细致版)

    PyInstaller的基本功能是将Python脚本打包成可执行文件,这意味着用户无需安装Python环境,就能运行打包后的程序,这篇文章主要介绍了python如何用PyInstaller打包成windows可执行exe的相关资料,需要的朋友可以参考下
    2025-04-04
  • 利用PyTorch实现VGG16教程

    利用PyTorch实现VGG16教程

    这篇文章主要介绍了利用PyTorch实现VGG16教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python制作动态词频条形图的全过程

    Python制作动态词频条形图的全过程

    说起动态图表,最火的莫过于动态条形图了,下面这篇文章主要给大家介绍了关于Python制作动态词频条形图的全过程,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-11-11
  • Python使用FastParquet库处理Parquet文件的方法

    Python使用FastParquet库处理Parquet文件的方法

    在大数据时代,数据存储和处理的效率至关重要,Parquet作为一种列式存储格式,因其高效的压缩和编码方案,成为大数据处理中的热门选择,本文将深入探讨FastParquet库的使用,帮助读者掌握如何利用这一工具高效处理Parquet文件,需要的朋友可以参考下
    2025-02-02
  • Python连接Oracle数据库的操作指南

    Python连接Oracle数据库的操作指南

    Oracle数据库是一种强大的企业级关系数据库管理系统(RDBMS),而Python是一门流行的编程语言,两者的结合可以提供出色的数据管理和分析能力,本教程将详细介绍如何在Python中连接Oracle数据库,并演示常见的数据库任务,需要的朋友可以参考下
    2023-11-11
  • Python实现爬取并分析电商评论

    Python实现爬取并分析电商评论

    这篇文章主要介绍了Python实现爬取并分析电商评论,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06

最新评论