欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > 一周学会Pandas2 Python数据处理与分析-Pandas2复杂数据查询操作

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

2025/12/16 19:44:27 来源:https://blog.csdn.net/caoli201314/article/details/147702204  浏览:    关键词:一周学会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)  # 所有孙姓数据

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词