首页 > 其他分享 >【Pandas】pandas eval

【Pandas】pandas eval

时间:2024-12-15 16:30:11浏览次数:7  
标签:None pd df DataFrame pandas dict eval Pandas

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 users
    parser: 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 pd

df = 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 代码。

标签:None,pd,df,DataFrame,pandas,dict,eval,Pandas
From: https://blog.csdn.net/weixin_39648905/article/details/144488344

相关文章

  • Pandas 核心内容
    构造DataFramedata=np.random.randint(0,100,size=(3,4))index=['tom','lucy','alex']columns=['语文','mathematics','physics','chemistry']pd.DataFrame(data=data,index=index,colum......
  • python3安装pandas
    检查安装环境检查python版本python--version检查pip版本pip--version检查安装列表piplist安装pandaspip3installpandas这是从官方下载安装,速度比较慢,可以使用国内镜像站清华:https://pypi.tuna.tsinghua.edu.cn/simple阿里云:http://mirrors.aliyun.com/py......
  • Towards Robust Evaluation: A Comprehensive Taxonomy of Datasets and Metrics for
    本文是LLM系列文章,针对《TowardsRobustEvaluation:AComprehensiveTaxonomyofDatasetsandMetricsforOpenDomainQuestionAnsweringintheEraofLargeLanguageModels》的翻译。迈向稳健评估:大语言模型时代开放领域问答的数据集和指标的综合分类摘要1......
  • 【Pandas】pandas infer_freq
    Pandas2.2GeneralTop-leveldealingwithdatetimelikedata方法描述to_datetime(arg[,errors,dayfirst,…])用于将对象数据(如字符串)转换为日期时间类型to_timedelta(arg[,unit,errors])用于将对象数据(如字符串)转换为时间差类型date_range([start,end,periods,fr......
  • 【Pandas】pandas timedelta_range
    Pandas2.2GeneralTop-leveldealingwithdatetimelikedata方法描述to_datetime(arg[,errors,dayfirst,…])用于将对象数据(如字符串)转换为日期时间类型to_timedelta(arg[,unit,errors])用于将对象数据(如字符串)转换为时间差类型date_range([start,end,periods,fr......
  • 利用Numpy和Pandas浏览数据
    我们先通过一个示例来看一下Numpy的作用:通过示例我们可以看到,相比较于普通列表的乘2只是重复两次相同数据,导入Numpy模块后,其元素会是真正数学意义上的乘二。因为Numpy数组是专门为支持数字数据的数学运算而设计的,这使得它们对于数据分析比一般列表更有用。我们通过类型还注......
  • 为什么eval要添加括号呢?
    在前端开发中,eval()函数经常需要添加括号,主要有两个原因:确保返回值被正确解析为JavaScript表达式:eval()会将传入的字符串当作JavaScript代码执行。如果不加括号,某些情况下返回值可能不会被正确解释。特别是当返回值是一个对象字面量(objectliteral)时,如果不加括号,JavaScr......
  • 解决Pandas的to_excel()写入不同Sheet,而不会被重写
    一、问题描述在使用Pandas的to_excel()方法写入数据时,当我们想将多个数据写入一个Excel表的不同DataFrame中,虽然能够指定sheet_name参数,但是会重写整个Excel之后才会存储。现在有3个sheet,内容如下:>>>importpandasaspd>>>df1=pd.read_excel('456.xlsx',sheet_name='Sh......
  • 【论文研读】只用大模型写代码就够了?复旦发布ClassEval,首次评估LLMs类级别代码生成能
    【导读】最近很多企业和校园学生开始使用大模型编程。但是有多少人知道大模型的实际代码生成能力?这篇文章提出了一个新颖的代码生成基准测试ClassEval,专注于类级别的代码生成,这是现有基准测试中较少涉及的领域。文章详细描述了ClassEval的构建过程,并通过实验评估了11种最先......
  • 关于数据处理模块pandas
    前言:Pandas库是一个免费、开源的第三方Python库,是Python数据分析必不可少的工具之一,它为Python数据分析提供了高性能,且易于使用的数据结构,即Series和DataFrame。Pandas自诞生后被应用于众多的领域,比如金融、统计学、社会科学、建筑工程等。但想学习的人注意了,孔子有......