【Pandas】pandas eval

Top-level evaluation

方法描述
eval(expr[, parser, engine, local_dict, …])用于在传入的字符串形式的表达式上进行高效计算的函数

pandas.eval()

pandas.eval() 是 Pandas 库中用于高效计算表达式的函数。它利用 NumExpr 库(如果已安装)来加速算术运算,并且可以直接操作 Pandas 的 DataFrame 和 Series 对象。下面是对 pandas.eval() 函数每个参数的详细介绍,以及示例和结果。

def eval(expr: str | BinOp,  # we leave BinOp out of the docstr bc it isn't for usersparser: str = "pandas",engine: str | None = None,local_dict=None,global_dict=None,resolvers=(),level: int = 0,target=None,inplace: bool = False,
):...
参数介绍
  1. expr : str

    • 要计算的字符串表达式。
    • 可以包含变量名(这些变量名应该是 DataFrame 的列名或已经定义的变量)、算术运算符、比较运算符、逻辑运算符等。
  2. parser : str {‘pandas’, ‘python’}, default ‘pandas’

    • 指定用于解析表达式的解析器。
    • ‘pandas’:使用 Pandas 的自定义解析器,它支持对 DataFrame 和 Series 的直接引用,并且可以利用 NumExpr 加速。
    • ‘python’:使用 Python 的标准 eval() 函数进行解析,它不支持对 DataFrame 和 Series 的直接引用,并且不会利用 NumExpr 加速。
  3. engine : str or None, default ‘numexpr’

    • 指定用于计算表达式的引擎。
    • ‘numexpr’:使用 NumExpr 库进行计算,如果已安装并且表达式适用。
    • ‘python’:使用 Python 的标准运算符进行计算。
    • 如果未安装 NumExpr,则默认使用 ‘python’。
  4. local_dict : dict or None, default None

    • 一个字典,用于指定表达式中变量的本地作用域。
    • 如果提供了此参数,则表达式中的变量将首先在此字典中查找。
  5. global_dict : dict or None, default None

    • 一个字典,用于指定表达式中变量的全局作用域。
    • 如果提供了此参数,并且变量在 local_dict 中未找到,则将在 global_dict 中查找。
  6. resolvers : list of dict-like or None, default None

    • 一个字典列表,每个字典都定义了一个变量的作用域。
    • 这些字典将按顺序搜索,直到找到所需的变量。
    • 这可以用于更复杂的变量解析场景。
  7. level : int or level name, default 0

    • 如果 expr 涉及对 MultiIndex/Advanced Indexing 的引用,则此参数指定要操作的级别。
  8. target : object, default None

    • 如果提供,则计算结果将直接存储在此对象中,而不是返回为一个新的对象。
    • 这可以用于原地修改 DataFrame 或 Series。
  9. inplace : bool, default False

    • 如果为 True,并且提供了 target 参数,则直接在 target 上进行修改,不返回任何值。
示例 1:基本算术运算
import pandas as pddf = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
result = pd.eval('df.A + df.B', local_dict=locals())
print(result)

结果

0    5
1    7
2    9
dtype: int64

注意:在这个例子中,我们使用了 locals() 来传递当前的局部变量环境给 pd.eval(),这样它就可以识别到 df 中的列 AB。然而,更常见的做法是直接引用 DataFrame 的列名,如下所示:

result = pd.eval('df["A"] + df["B"]')
print(result)

这将得到相同的结果。

示例 2:使用变量和比较运算
x = 10
df = pd.DataFrame({'A': [1, 2, 3, 10, 11], 'B': [4, 5, 6, 7, 8]})
result = pd.eval('A > x', locals={'A': df['A'], 'x': x})
print(result)

结果

0    False
1    False
2    False
3     True
4     True
dtype: bool

在这个例子中,我们直接在 pd.eval() 中使用了字典来指定 Ax 的值。

示例 3:原地修改 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
pd.eval('C = df.A + df.B', inplace=True, target=df)
print(df)

结果

   A  B  C
0  1  4  5
1  2  5  7
2  3  6  9

在这个例子中,我们直接在 df 上添加了一个新列 C,它是 AB 列的和。注意,这里我们使用了 inplace=Truetarget=df 参数来原地修改 df

请注意,pandas.eval() 是一个强大的工具,但应该谨慎使用,特别是在处理不受信任的输入时,因为它可以执行任意的 Python 代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

56.合并区间

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入:intervals [[1,3]…

域名信息收集(小迪网络安全笔记~

附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正! 2.1 域名信息收集 引子:上一章介绍了服务器的信息收集。本篇则介绍在面对存在Web资产企业时,其域名信息该如何收…

怎样使用Eclipse创建Maven的Java WEB 项目

文章目录 1、第一种方式(选择 archetype 方式) 1.1、第一步:创建项目1.2、第二步:配置jre1.3、第三步:配置tomcat1.4、第四步:设置为WEB3.11.5、第五步:配置Maven的编译级别 1.5.1、第一种方法…

细说STM32F407单片机SPI基础知识

目录 一、 SPI接口和通信协议 1、 SPI硬件接口 (1)MOSI(Master Output Slave Input) (2)MISO(Master Input Slave Output) (3)SCK 2、SPI传输协议 (1)CPHA0时的数据传输时序 …

C# OpenCvSharp DNN 实现百度网盘AI大赛-表格检测第2名方案第三部分-表格方向识别

目录 说明 效果 模型 项目 ​编辑 代码 参考 下载 其他 说明 百度网盘AI大赛-表格检测的第2名方案。 该算法包含表格边界框检测、表格分割和表格方向识别三个部分,首先,ppyoloe-plus-x 对边界框进行预测,并对置信度较高的表格边界…

go语言结构体实现数据结构队列(先进先出)存储数据(逐行注释)

正在学习go语言中,欢迎提出宝贵意见 import ("fmt""sync" )// 数据队列以链表的形式存储数据,每个节点存储一个任意类型的数据, // 创建数据队列、添加数据、删除数据、获取队列长度,每个数据存储在一个节点…

Excel + Notepad + CMD 命令行批量修改文件名

注意:该方式为直接修改原文件的文件名,不会生成新文件 新建Excel文件 A列:固定为 renB列:原文件名称C列:修改后保存的名称B列、C列,需要带文件后缀,为txt文件就是.txt结尾,为png图片…

数据结构-排序(来自于王道)

排序的基本概念 插入排序 在这个算法中,除了输入的数组本身,没有使用额外的数据结构来存储数据,所有的操作都是在原数组上进行的。因此,无论输入数组的大小 n 是多少,算法执行过程中所占用的额外空间是固定的&#xff…

MySQL中DELETE、DROP和TRUNCATE的区别是什么?

MySQL中,DELETE、DROP和TRUNCATE是用于数据管理的三个重要命令,但它们之间存在显著的区别。以下是它们的主要差异: 一、用法不同 DROP 用途:用于删除整个表及其结构。语法:DROP TABLE 表名;特点:在执行DRO…

算力介绍与解析

算力(Computing Power)是指计算机系统在单位时间内处理数据和执行计算任务的能力。算力是衡量计算机性能的重要指标,直接影响计算任务的速度和效率。 算力的分类和单位 a. 基础算力:以CPU的计算能力为主。适用于各个领域的计算。…

SVN(Subversion)教程

SVN(Subversion)教程:版本控制入门 什么是 SVN? SVN(Subversion)是一个集中式版本控制系统,用于管理代码、文档等文件的版本历史。它帮助团队协作开发,提供版本跟踪、文件还原和冲…

vite搭建前端工程

vite简介 vite预构建 将非 ESM 规范的代码转换为符合 ESM 规范的代码,另外就是将第三方依赖内部的多个文件合并为一个,减少 http 请求数量 简单来说,vite在一开始将应用中的模块区分为依赖和源码两类 「依赖部分」更多指的是代码中使用到的第三方模块,比如 vue、lodash、r…

【编译器】传统编译器和AI/ML编译器总结

前言 本文总结了传统编译器和AI/ML编译器,可作为学习、研究、研发的参考资料。 1.编译器-GC Clang Clang是一个C、C、Objective-C和Objective-C编程语言的编译器前端。它采用了LLVM作为其后端,由LLVM2.6开始,一起发布新版本。它的目标是提供一…

使用阿里云Certbot-DNS-Aliyun插件自动获取并更新免费SSL泛域名(通配符)证书

进入nginx docker,一般是Alpine Linux系统 1. 依次执行命令: sudo docker-compose exec nginx bashapk updateapk add certbot apk add --no-cache python3 python3-dev build-baseapk add python3 py3-pippip3 install --upgrade pippip3 install certbot-dns-ali…

IMUX6LL嵌入式-Linux开发中的头文件汇总介绍

sys/mman.h 详见 https://blog.csdn.net/wenhao_ir/article/details/144487608 sys/types.h 详见 https://blog.csdn.net/wenhao_ir/article/details/144487608 sys/stat.h 详见 https://blog.csdn.net/wenhao_ir/article/details/144487608 unistd.h 详见 https://blog…

spring boot框架优劣势分析

优势(Advantages): 1. 快速开发(Rapid Development): • Spring Boot通过提供大量的默认配置和自动配置功能,极大地减少了开发过程中的配置工作量,从而加快了开发速度。 2. 简化部署&#xff08…

【设计模式】如何用C++实现观察者模式【发布订阅机制】

【设计模式】如何用C实现观察者模式【发布订阅机制】 一、问题背景 代码质量影响生活质量。最近工作中频繁接触各种设计模式,深刻体会到优秀的设计模式不仅能显著降低后续维护的压力,还能提升开发效率。观察者模式作为一种降低耦合度、提高扩展性的利器…

企业架构划分探讨:业务架构与IT架构的利与弊

在企业架构(EA)的江湖里,大家一直致力于如何把企业的复杂性简化成有条有理的架构蓝图。有人选择把企业架构分成业务架构和IT架构,而IT架构又进一步细分为应用架构、数据架构和技术架构。但一提到这种划分方式,总有人跳…

QT:在线安装与离线安装

QT 学习系列 QT:在线安装与离线安装 QT 学习系列一、安装(一)离线安装windows系统Linux 系统Mac 系统 (二)在线安装 二、 环境变量配置三、验证总结 一、安装 (一)离线安装 windows系统 获取…

FFmpeg功能使用

步骤:1,安装FFmpeg Download FFmpeg 在这里点击->Windows builds from gyan.dev;如下图 会跳到另外的下载界面: 在里面下拉选择点击ffmpeg-7.1-essentials_build.zip: 即可下载到FFmpeg; 使用&#…