DataFrame条件筛选:从入门到实战的数据清洗利器

引言:为什么条件筛选是数据分析的核心技能?

在处理真实数据时,我们常常面临这样的需求:

  • 从销售数据中找出销售额超过10万的订单
  • 筛选出年龄在18-25岁之间的用户群体
  • 提取特定时间段内的日志记录

这些场景都离不开 条件筛选 ------它是数据清洗、探索性分析(EDA)和特征工程的基础。本文将通过 5个核心方法 + 3个实战案例,带你掌握Pandas中条件筛选的精髓。


一、基础条件筛选:布尔索引(Boolean Indexing)

1. 单条件筛选

假设有一个学生成绩表 df_students

python 复制代码
import pandas as pd

data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Score': [85, 92, 78, 88],
    'Grade': ['B', 'A', 'C', 'B']
}
df_students = pd.DataFrame(data)

需求 :筛选出分数 ≥90 的学生

python 复制代码
high_scores = df_students[df_students['Score'] >= 90]
print(high_scores)

输出

复制代码
   Name  Score Grade
1   Bob     92     A
2. 多条件组合筛选(与/或/非)

使用 &(与)、|(或)、~(非)组合多个条件,必须用括号包裹每个条件

需求 :筛选出 分数≥80 且 等级为B 的学生

python 复制代码
filtered = df_students[(df_students['Score'] >= 80) & (df_students['Grade'] == 'B')]
print(filtered)

输出

复制代码
    Name  Score Grade
0  Alice     85     B
3  David     88     B

二、进阶筛选技巧

1. 使用 query() 方法(代码更简洁)

对于复杂条件,query() 可以避免冗长的括号嵌套:

python 复制代码
# 等价于 (Score >= 80) & (Grade == 'B')
filtered = df_students.query("Score >= 80 and Grade == 'B'")
2. isin() 方法:筛选多个特定值

需求 :找出 等级为A或C 的学生

python 复制代码
filtered = df_students[df_students['Grade'].isin(['A', 'C'])]
print(filtered)

输出

复制代码
      Name  Score Grade
1      Bob     92     A
2  Charlie     78     C
3. str.contains():字符串模糊匹配

需求 :筛选名字中包含 'li' 的学生(不区分大小写)

python 复制代码
filtered = df_students[df_students['Name'].str.contains('li', case=False)]
print(filtered)

输出

复制代码
      Name  Score Grade
0    Alice     85     B
2  Charlie     78     C

三、实战案例:从电商数据中提取关键信息

假设有一个电商订单数据集 df_orders

python 复制代码
orders_data = {
    'OrderID': [1001, 1002, 1003, 1004],
    'CustomerID': [C001, C002, C001, C003],
    'Amount': [120, 45, 200, 80],
    'Date': ['2023-01-15', '2023-01-20', '2023-02-05', '2023-02-10'],
    'Category': ['Electronics', 'Clothing', 'Electronics', 'Food']
}
df_orders = pd.DataFrame(orders_data)
案例1:筛选高价值订单(金额>100)
python 复制代码
high_value_orders = df_orders[df_orders['Amount'] > 100]
案例2:筛选2023年2月的电子产品订单
python 复制代码
import datetime
df_orders['Date'] = pd.to_datetime(df_orders['Date'])  # 转换日期格式
feb_electronics = df_orders[
    (df_orders['Date'].dt.month == 2) & 
    (df_orders['Category'] == 'Electronics')
]
案例3:统计每个客户的订单总数(分组+筛选)
python 复制代码
customer_stats = df_orders.groupby('CustomerID').size().reset_index(name='OrderCount')
frequent_customers = customer_stats[customer_stats['OrderCount'] > 1]

四、常见错误与避坑指南

  1. 忘记加括号

    ❌ 错误写法:df[df['A'] > 1 & df['B'] < 2]

    ✅ 正确写法:df[(df['A'] > 1) & (df['B'] < 2)]

  2. 字符串比较未加引号

    df[df['Grade'] == A]

    df[df['Grade'] == 'A']

  3. 日期筛选前未转换格式

    确保先用 pd.to_datetime() 转换日期列,否则无法用 .dt 访问年月日。


总结:条件筛选的"三步法"

  1. 明确需求:确定要筛选的列和条件逻辑
  2. 构建条件 :用 >==isin() 等生成布尔序列
  3. 应用筛选 :通过 df[condition]query() 提取数据

下一步建议

  • 尝试在真实数据集(如Kaggle的Titanic或电商数据)中练习
  • 学习 loc[]iloc[] 实现更复杂的行列筛选
  • 探索Dask或PySpark处理超大规模数据的条件筛选

附:完整代码示例
GitHub Gist链接(可替换为实际代码仓库链接)

希望这篇博客能帮助你彻底掌握DataFrame条件筛选!如果有任何疑问,欢迎在评论区交流 🚀

相关推荐
极梦网络无忧4 小时前
OpenClaw 基础使用说明(中文版)
python
codeJinger4 小时前
【Python】操作Excel文件
python·excel
XLYcmy5 小时前
一个针对医疗RAG系统的数据窃取攻击工具
python·网络安全·ai·llm·agent·rag·ai安全
Islucas5 小时前
Claude code入门保姆级教程
python·bash·claude
萝卜白菜。5 小时前
TongWeb7.0相同的类指明加载顺序
开发语言·python·pycharm
赵钰老师5 小时前
【ADCIRC】基于“python+”潮汐、风驱动循环、风暴潮等海洋水动力模拟实践技术应用
python·信息可视化·数据分析
爬山算法6 小时前
MongoDB(80)如何在MongoDB中使用多文档事务?
数据库·python·mongodb
YuanDaima20486 小时前
基于 LangChain 1.0 的检索增强生成(RAG)实战
人工智能·笔记·python·langchain·个人开发·langgraph
RopenYuan7 小时前
FastAPI -API Router的应用
前端·网络·python