Pandas 中文手册

12.2 多条件筛选(重点,实战高频)

Pandas多条件筛选:逻辑运算符与query方法实战指南

Pandas 中文手册

本章节详细讲解Pandas中多条件筛选的核心方法,包括逻辑与(&)、逻辑或(|)、逻辑非(~)的使用,注意事项如括号优先级和表达式规范,并推荐简化筛选的query方法,适合数据分析初学者快速掌握。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

Pandas多条件筛选

多条件筛选是Pandas数据处理的重点内容,在实际分析中高频使用。本章将系统介绍如何应用逻辑运算符进行筛选,涵盖注意事项和简化方法,帮助新手快速上手。

逻辑与筛选(&)

逻辑与筛选要求多个条件同时满足,使用&运算符。每个条件需用括号包裹,以避免优先级问题。

示例代码:

import pandas as pd

# 创建示例DataFrame
df = pd.DataFrame({
    '姓名': ['张三', '李四', '王五', '赵六'],
    '年龄': [25, 30, 22, 28],
    '城市': ['北京', '上海', '北京', '广州']
})

# 筛选条件:年龄大于25且城市为北京
filtered_df = df[(df['年龄'] > 25) & (df['城市'] == '北京')]
print(filtered_df)

输出:

   姓名  年龄  城市
2  王五  22  北京  # 注意:年龄22不大于25,所以无符合条件的数据,这里示例无输出,实际为空的DataFrame

修正示例:

# 修正条件:年龄大于20且城市为北京
filtered_df = df[(df['年龄'] > 20) & (df['城市'] == '北京')]
print(filtered_df)

输出:

   姓名  年龄  城市
0  张三  25  北京
2  王五  22  北京

逻辑或筛选(|)

逻辑或筛选要求至少一个条件满足,使用|运算符。同样需要使用括号确保表达式正确。

示例代码:

# 筛选条件:年龄大于28或城市为上海
filtered_df = df[(df['年龄'] > 28) | (df['城市'] == '上海')]
print(filtered_df)

输出:

   姓名  年龄  城市
1  李四  30  上海

逻辑非筛选(~)

逻辑非筛选用于排除不满足某个条件的数据,使用~运算符。它可以反转布尔序列。

示例代码:

# 筛选条件:城市不为北京
filtered_df = df[~(df['城市'] == '北京')]
print(filtered_df)

输出:

   姓名  年龄  城市
1  李四  30  上海
3  赵六  28  广州

多条件筛选的注意事项

在组合多条件时,需注意以下几点,以避免常见错误:

  1. 括号优先级:在Python中,比较运算符(如>==)优先级高于&|,但低于andor。因此,必须用括号包裹每个条件,例如(df['年龄'] > 25) & (df['城市'] == '北京'),而不是df['年龄'] > 25 & df['城市'] == '北京',后者会因运算符优先级导致错误。
  2. 条件表达式规范:确保每个条件返回布尔序列,且长度与DataFrame一致。例如,避免混合不同类型或使用无效列名。
  3. 组合复杂性:随着条件增多,表达式可能变得冗长。建议使用括号分组条件,提高可读性。

多条件筛选的简化方法:query方法

query方法允许使用字符串表达式进行筛选,代码更简洁,推荐在高频筛选场景中使用。它支持类似Python的表达式,但以字符串形式传递。

示例代码:

# 使用query方法筛选:年龄大于25且城市为北京
filtered_df = df.query('年龄 > 25 and 城市 == "北京"')
print(filtered_df)

输出:

   姓名  年龄  城市
2  王五  22  北京  # 注意:年龄22不大于25,无符合条件数据,示例为空

修正示例:

# 修正条件:年龄大于20且城市为北京
filtered_df = df.query('年龄 > 20 and 城市 == "北京"')
print(filtered_df)

输出:

   姓名  年龄  城市
0  张三  25  北京
2  王五  22  北京

为什么推荐query方法

  • 语法更接近自然语言,易于理解和维护。
  • 避免了复杂的括号嵌套,减少错误。
  • 支持列名中的空格等特殊情况,但需用反引号包裹(例如query('年龄 > 25'))。

总结

多条件筛选是Pandas数据分析的核心技能。通过掌握逻辑运算符和query方法,你可以高效处理复杂筛选需求。记住使用括号确保优先级,并尝试简化代码以提升效率。练习这些技巧,将在实战中更得心应手。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包