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条件筛选!如果有任何疑问,欢迎在评论区交流 🚀

相关推荐
深蓝电商API5 分钟前
旅游网站景点评论情感分析
爬虫·python
运维老王33 分钟前
运维人如何用 Python 自动化提升 10 倍效率
python
AI-小柒1 小时前
OpenClaw技术深度解析:从智能助手到自动化引擎的范式革命(附DataEyes实战)
大数据·运维·开发语言·人工智能·python·http·自动化
所谓伊人,在水一方3331 小时前
【Python数据可视化精通】第1讲 | 数据可视化的本质与认知心理学基础
开发语言·python·信息可视化·matplotlib
ding_zhikai1 小时前
【Web应用开发笔记】Django笔记9:Django部署注意事项补充
笔记·后端·python·django
所谓伊人,在水一方3331 小时前
【Python数据科学实战之路】第18章 | 大模型与数据科学:LLM赋能数据分析新时代
开发语言·python·深度学习·神经网络·数据分析·tensorflow
吃吃喝喝小朋友1 小时前
Django Admin后台系统
后端·python·django
赵谨言1 小时前
摘要本研究旨在构建一套基于OpenCV与CNN融合技术的银行卡号自动识别系统,重点解决不同银行卡号字体格式差异、倾斜污损等复杂场景下的识别难题
大数据·开发语言·经验分享·python
怪侠_岭南一只猿1 小时前
爬虫阶段一实战练习题:爬取豆瓣电影 Top250 复盘
css·经验分享·爬虫·python·学习·正则表达式