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

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

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

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

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

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


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

1. 单条件筛选

假设有一个学生成绩表df_students

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

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

high_scores=df_students[df_students['Score']>=90]print(high_scores)

输出

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

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

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

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()可以避免冗长的括号嵌套:

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

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

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’的学生(不区分大小写)

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

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)
high_value_orders=df_orders[df_orders['Amount']>100]
案例2:筛选2023年2月的电子产品订单
importdatetime df_orders['Date']=pd.to_datetime(df_orders['Date'])# 转换日期格式feb_electronics=df_orders[(df_orders['Date'].dt.month==2)&(df_orders['Category']=='Electronics')]
案例3:统计每个客户的订单总数(分组+筛选)
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条件筛选!如果有任何疑问,欢迎在评论区交流 🚀

http://www.jsqmd.com/news/394955/

相关文章:

  • 题解:洛谷 P2700 逐个击破
  • DataFrame数据修改:从基础操作到高效实践的完整指南
  • 深入浅出BlockingQueue(三)
  • 从0学习pwn【第二章】pwngdb调试
  • 题解:洛谷 P1967 [NOIP 2013 提高组] 货车运输
  • 负债上岸不踩坑!口碑好的贷款信用卡个人债务协商公司,渠道+服务全揭秘 - 代码非世界
  • 题解:洛谷 P1396 营救
  • 从0学习pwn【第一章】PWN学习环境搭建
  • 负债逾期别乱投医!2026正规债务协商规划机构排行榜,上岸党实测推荐 - 代码非世界
  • 题解:洛谷 P1194 买礼物
  • 避免提示设计踩雷的秘诀:提示工程架构师的用户流程测试风险评估
  • 免费白嫖可灵+阿里顶级AI,图片视频随便生!不限量
  • 大语言模型在AI原生应用领域的未来展望
  • 题解:洛谷 P3366 【模板】最小生成树
  • 大数据领域数据服务的人工智能算法优化
  • 【每日一题】LeetCode 696. 计数二进制子串
  • 信用卡逾期不用慌!全国专业贷款协商与逾期处理律所实测推荐,负债人上岸指南 - 代码非世界
  • 关于本人发布的应用的隐私策略
  • 股市赚钱学概论:赚钱理之一,赚红利的钱
  • 大数据领域数据工程的边缘计算数据处理方案
  • ANSYS/LS-DYNA 隧道光面爆破数值模拟(CAD+LS-DYNA)课程说明:模型建立、...
  • 我用 AI 写了四五个软件之后的总结
  • 测试一下32位CPU和64位CPU下的long类型变量大小
  • 《解析AI应用架构师眼中人机协作在未来工作的独特优势》
  • 大学生HTML期末大作业——HTML+CSS+JavaScript购物商城(车之家)完整教程:从入门到实战部署
  • 企业微信协议接口的安全合规性设计与审计实践 - 教程
  • 意义的主权:AI元人文视域下的古典智慧重释与AI时代的人类责任
  • 2025年GPU算力租赁市场总结
  • 高级java每日一道面试题-2025年7月10日-基础篇[LangChain4j]-如何集成多个不同的 Model Provider(如同时使用 OpenAI 和本地模型)?