百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

【Pandas】(5) eval和query python里面eval怎么理解

liuian 2024-12-20 17:18 39 浏览

使用eval()进行高效计算

eval() 函数在 Pandas 中是一种高效率的字符串表达式求值器,允许对 DataFrame 进行快速计算。这个功能基于 Numexpr 库,能够加速某些特定类型的操作,尤其是在处理大型 DataFrame 时。

基本使用

eval() 允许你使用字符串表达式来执行算术运算、比较运算等操作。这些操作可以是两个 DataFrame 的列之间,也可以是 DataFrame 的列与标量之间的运算。

语法

pd.eval(expr, inplace=False)
  • expr: 字符串形式的表达式。
  • inplace: 如果为 True,则直接在原 DataFrame 上修改而不返回新的 DataFrame。默认为 False。

示例

首先,创建一个示例 DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10, 3), columns=['A', 'B', 'C'])

列与列之间的运算

使用 eval() 计算 DataFrame 中的两列之和,并将结果作为新列添加到 DataFrame 中。

df.eval('D = A + B', inplace=True)

列与标量之间的运算

可以对 DataFrame 中的列进行标量运算。

df.eval('E = A * 2', inplace=True)

复杂表达式

eval() 支持更复杂的表达式,包括使用 Python 的数学函数和条件表达式。

df.eval('F = np.sqrt(A) + np.log(B)', inplace=True)

过滤操作

eval() 还可以用来过滤 DataFrame,返回满足条件的行。

result = df.eval('A > 0.5')

局部变量

如果你想在 eval() 表达式中使用局部变量,可以通过 @ 符号引用它们。

threshold = 0.5
result = df.eval('A > @threshold')

使用query()进行高效查询

Pandas 的 query() 方法提供了一种查询 DataFrame 行的强大方式,使用布尔表达式作为查询字符串,这使得筛选复杂数据集变得简单直观。这个方法是基于 Numexpr 库实现的,能够提高某些查询操作的性能。

基本使用

query() 方法允许你使用字符串形式的查询表达式来筛选数据。

语法

DataFrame.query(expr, inplace=False, **kwargs)
  • expr: 一个字符串形式的查询表达式。
  • inplace: 如果为 True,则修改原 DataFrame 而不是返回一个新的 DataFrame。默认为 False。
  • **kwargs: 关键字参数,用于传递给 eval() 方法,例如, local_dictglobal_dict 用于在表达式中使用外部变量。

示例

首先,创建一个示例 DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': np.random.randint(1, 10, 5),
    'B': np.random.randint(1, 10, 5),
    'C': np.random.rand(5)
})

简单查询

使用 query() 根据列 A 的值筛选行:

result = df.query('A > 5')

复合条件查询

你可以在查询表达式中使用多个条件,结合 andor 逻辑操作符:

result = df.query('A > 5 and B < 8')

使用外部变量

如果你想在查询表达式中使用 Python 变量,可以通过在变量名前加 @ 符号来实现:

threshold = 5
result = df.query('A > @threshold')

使用索引查询

query() 方法也可以用于查询 DataFrame 的索引:

df.index.name = 'index'  # 给索引命名,方便在 query 中引用
result = df.query('index > 2')

相关推荐

vue是什么东西(vue是干什么的)

首先看看官方网站是怎么解释的,如下:Vue(读作/vju/,类似于view)是一个用于构建用户界面的渐进式框架。与其他单体框架不同,Vue从一开始就被设计为可逐步采用的。核心库仅专注于视图层,易于...

超赞 vue2/3 可视化打印设计VuePluginPrint

今天来给大家推荐一款非常不错的Vue可拖拽打印设计器Hiprint。引入使用//main.js中引入安装import{hiPrintPlugin}from'vue-plugin-...

使用VuePress2.X构建个人知识博客,域名部署到GitHub Pages中

使用VuePress2.X构建个人知识博客,并且用个人域名部署到GitHubPages中什么是VuePressVuePress是一个以Markdown为中心的静态网站生成器。你可以使用Mar...

尤雨溪新品Vite的魔力,详解(尤雨溪新品vite的魔力,详解解析)

上篇《尤雨溪是个恶魔,Vite三天10更》谈到了Webpack这一系列打包工具出现的原因。这些工具的出现是为了解决ESModules模块系统本身的环境兼容问题、以及零散的模块文件导致的...

什么是VUE?vue有什么作用?(vue的主要用途)

什么是vue?Vue.js是一套构建用户界面的渐进式框架,Vue采用自下向上增量开发的设计,其核心库只关注视图层,易于上手,同时vue完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复...

10个Vue开发技巧「实践」(vue开发需要掌握哪些知识)

作者:WahFung转发链接:https://juejin.im/post/5e8a9b1ae51d45470720bdfa路由参数解耦一般在组件内使用路由参数,大多数人会这样做:exportdef...

刚搭好vuecli结果官网建议升级vite,于是就升级下

从vue-cli迁移到Vite进行迁移的主要原因是速度。Vite的开发服务器速度很快。因为它使用原生浏览器支持JavaScript模块,所以服务器启动时间是即时的。该方法还意味着无论应用程...

无所不能,将 Vue 渲染到嵌入式液晶屏

该文章转载自公众号@前端时刻,https://mp.weixin.qq.com/s/WDHW36zhfNFVFVv4jO2vrA前言之前看了雪碧大佬的将React渲染到嵌入式液晶屏觉得很有意思,R...

【开源】基于 Vue 和 Gin 开发的前后端分离的开源框架

项目介绍Gin-vue-admin是一个基于vue和gin开发的全栈前后端分离的开发基础平台,旨在快速搭建中小型项目。拥有jwt鉴权,动态路由,动态菜单,casbin鉴权,表单生成器,代码生成器等功能...

Firefox正针对Vue.js进行优化,下版本响应速度将“显著提升”

IT之家9月7日消息,据Mozilla官方博客发文显示,Firefox浏览器正针对Vue.js进行优化,此前FireFox浏览器在面向Vue3时遇到了一些性能问题。▲图源...

vue:生命周期钩子函数及顺序(vue3.0生命周期函数)

一、vue的钩子相关顺序Vue实例有一个完整的生命周期,在newVue()后,会初始化数据,如下://初始化的入口,各种初始化工作initMixin(Vue);//数据绑定的核心方法,包括常用...

使用 Pinia ORM 管理 Vue 中的状态

转载说明:原创不易,未经授权,谢绝任何形式的转载状态管理是构建任何Web应用程序的重要组成部分。虽然Vue提供了管理简单状态的技术,但随着应用程序复杂性的增加,处理状态可能变得更具挑战性。这就是为什么...

搭建Trae+Vue3的AI开发环境(vue ide 开发工具)

从2024年2025年,不断的有各种AI工具会在自媒体中火起来,号称各种效率王炸,而在AI是否会替代打工人的话题中,程序员又首当其冲。作为一个后端开发,这篇文章基于Trae工具,来创建和运行一个简单的...

如何在Vue3中使用Nuxt进行服务端渲染开发?

服务端渲染SSR(Server-SideRendering)是一种在服务器端生成网页内容的技术,这种实现方式与传统的客户端渲染CSR(Client-SideRendering)有所不同。在SSR中...

一篇文章说清 webpack、vite、vue-cli、create-vue 的区别

webpack、vite、vue-cli、create-vue这些都是什么?看着有点晕,不要怕,我们一起来分辨一下。先看这个表格:脚手架vue-clicreate-vue构建项目vite打包代码we...