当前位置: 首页 > web >正文

一周学会Pandas2 Python数据处理与分析-Pandas2复杂数据查询操作

锋哥原创的Pandas2 Python数据处理与分析 视频教程:  

2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili

前面我们学了.loc[]等几个简单的数据筛选操作,但实际业务需求往 往需要按照一定的条件甚至复杂的组合条件来查询数据。

逻辑运算操作

类似于Python的逻辑运算,我们以DataFrame其中一列进行逻辑计算,会产生一个对应的由布尔值组成的Series,真假值由此位上的数据是否满足逻辑表达式决定。

我们看一个最简单示例,查看语文是否及格:

df.set_index('姓名').语文分数 >= 60

同样支持多列判断,查看语文,数据,英语是否及格:

df.set_index('姓名').loc[:, ['语文分数', '数学分数', '英语分数']] >= 60

同时还支持组合条件的逻辑运算,我们来查下数学及格的男生。

~(df.数学分数 < 60) & (df['性别'] == '男')

逻辑筛选数据操作

前面我们逻辑运算返回的是布尔类型的Series结果集,我们现在可以通过切片[],.loc()方法来返回逻辑筛选结果。

我们看几个切片[]实例:

df[df['语文分数'] >= 60] # 查询语文及格的人
df[~(df['语文分数'] >= 60)] #查询语文不及格的人
df[df.语文分数 > df.数学分数] # 查询语文分数高于数学分数的人

我们在几个.loc[]实例:

df.loc[df['语文分数'] >= 60, '语文分数'] # 查询语文及格的人,只显示索引名称和语文分数列
df.loc[(df.语文分数 >= 60) & (df.数学分数 >= 60) & (df.英语分数 >= 60)] # 语数英都及格的人
df.loc[(df.语文分数 >= 90) | (df.数学分数 >= 90) | (df.英语分数 >= 90)] # 语数英至少有一个90分的人
df.loc[df.语文分数 == 100] # 语文满分的人

需要注意的是在进行或(|)、与(&)、非(~)运算时,各个独 立逻辑表达式需要用括号括起来。

pandas提供了一些比较函数来支持逻辑运算:

df.ne() # 不等于 !=
df.le() # 小于等于 <=
df.lt() # 小于 <
df.ge() # 大于等于 >=
df.gt() # 大于 >

参考示例:

df.loc[df.语文分数.eq(100)] # 语文满分的人
df.loc[(df.语文分数.ge(60)) & (df.数学分数.ge(60)) & (df.英语分数.ge(60))]  # 语数英都及格的人

查询函数query()操作

pandasquery() 方法是一种高效且简洁的 DataFrame 数据过滤工具,允许通过字符串表达式筛选满足条件的行。它的语法类似于 SQL 的 WHERE 子句,特别适合复杂查询和动态条件处理。

基本语法

DataFrame.query(expr, inplace=False, **kwargs)
  • expr:字符串形式的查询条件表达式(支持列名、运算符、逻辑条件等)。

  • inplace:是否直接修改原 DataFrame(默认为 False,返回新 DataFrame)。

  • **kwargs:其他参数(如 engine='python'parser='pandas')。


核心特性

  1. 简洁性:无需重复写 DataFrame 名称,直接使用列名操作。

  2. 动态表达式:支持字符串插值(如 @variable 引用外部变量)。

  3. 性能优化:底层依赖 numexpr 库,对大数据集查询效率更高。

  4. 复杂条件支持:灵活组合多条件(and/or/not)。

我们来看下示例:

df.query('数学分数>90') # 数学分数大于90的人
df.query('数学分数+语文分数+英语分数>250') # 总分大于250的人
df.query('(语文分数>90)&(性别=="男")') # 语文分数90分以上的男生
df.query('(语文分数>90)and(性别=="男")') # 语文分数90分以上的男生

还支持使用@符号引入变量,看下下面示例:

avg = df.语文分数.mean()  # 求平均分
df.query('语文分数>@avg')  # 语文分数超过平均分的人
df.query('语文分数>@avg+30')  # 语文分数超过平均分30分的人

筛选函数filter()操作

pandasfilter() 方法用于根据行或列的标签名称筛选数据,支持按列名或行名匹配规则快速过滤。它不依赖数据内容,而是基于标签的规则匹配,适合处理列名或索引有特定规律的场景。

基本语法

DataFrame.filter(items=None,         # 直接指定列名/行名列表like=None,          # 模糊匹配包含指定字符串的标签regex=None,         # 正则表达式匹配标签axis=None           # 筛选方向:0(行)或 1(列,默认)
)

核心参数详解:

  1. items:精确匹配列名或行名

  2. like:模糊匹配包含字符串的标签

  3. regex:正则表达式匹配标签

  4. axis:指定筛选方向

具体示例:

df.filter(items=['语文分数', '数学分数']) # 选择列
df.filter(like='分数')  # 列名包含分数的列
df.filter(regex='孙', axis=0)  # 所有孙姓数据

http://www.xdnf.cn/news/3836.html

相关文章:

  • 【前端】【面试】在 Nuxt.js SSR/SSG 应用开发的 SEO 优化方面,你采取了哪些具体措施来提高页面在搜索引擎中的排名?
  • NPP库中libnppist模块介绍
  • 利用flask设计接口
  • 学习黑客 week1周测 复盘
  • AIDC智算中心建设:计算力核心技术解析
  • 0.0973585?探究ts_rank的score为什么这么低
  • Spring AI 实战:第十章、Spring AI RAG之博学多才
  • 构建“设备数据抽取 + 可视化”华为云rest、soap、roma和自定义的这些连接器类型和作用说明
  • 【人工智能学习笔记 二】 MCP 和 Function Calling的区别与联系
  • OpenCV入门指南:从环境搭建到第一个图像处理程序
  • ios systeam introduction
  • 机器学习和深度学习的对比
  • 科普简洁版:同态加密——密码学的未来瑰宝
  • 五一作业-day01
  • STM32Cube-FreeRTOS任务管理工具函数-笔记
  • 【QT】QT中的网络编程(TCP 和 UDP通信)
  • ES6入门---第二单元 模块五:模块化
  • 【Godot】使用 Shader 实现可配置圆角效果
  • 34.多点求均值的模拟信号抗干扰算法使用注意事项
  • word批量转pdf工具
  • Semaphore的详细源码剖析
  • 函数递归+函数栈帧(简)
  • chili3d调试10 网页元素css node deepwiki 生成圆柱体 生成零件图片
  • Go Web 后台管理系统项目详解
  • 文章记单词 | 第63篇(六级)
  • 解析MCUboot的实现原理和Image结构
  • 【Java学习笔记】作用域
  • FPGA----基于ZYNQ 7020实现EPICS通信系统
  • Linux线程同步机制深度解析:信号量、互斥锁、条件变量与读写锁
  • Python基本语法(lambda表达式)