首页 > pandas数据分析实战训练营 > 项目3:数据筛选与查询

项目3:数据筛选与查询

数据集:员工信息表 | 难度:进阶 | 预计用时:55分钟

学习目标

  • 掌握单条件和多条件数据筛选
  • 理解loc和iloc的区别与用法
  • 学会字符串匹配筛选
  • 掌握范围查询和isin查询

知识点讲解

1. 条件筛选

筛选就像Excel里的"筛选"按钮,只不过用代码写。基本思路是:先写条件,再把条件放进中括号里。

# 筛选出年龄大于30岁的员工 df[df['年龄'] > 30] # 筛选出部门是"销售部"的员工 df[df['部门'] == '销售部']

2. 多条件组合

多个条件组合时,用 & 表示"且",用 | 表示"或"。注意每个条件要用圆括号括起来。

# 年龄大于30 且 部门是销售部 df[(df['年龄'] > 30) & (df['部门'] == '销售部')] # 部门是销售部 或 部门是市场部 df[(df['部门'] == '销售部') | (df['部门'] == '市场部')] # 年龄不在25到35之间 df[~((df['年龄'] >= 25) & (df['年龄'] <= 35))]

3. loc和iloc

这两个是pandas里最重要的定位工具:

  • loc:按"标签"(行名/列名)定位,比如 df.loc[0:5, ['姓名','年龄']]
  • iloc:按"位置"(第几行/第几列)定位,从0开始数,比如 df.iloc[0:5, 0:3]

简单记忆:loc带"名字",iloc带"数字"。

4. 字符串匹配

当需要按文字内容模糊匹配时,用str方法:

# 姓名中包含"张"的员工 df[df['姓名'].str.contains('张')] # 姓名以"李"开头 df[df['姓名'].str.startswith('李')] # 姓名以"伟"结尾 df[df['姓名'].str.endswith('伟')] # 忽略大小写匹配 df[df['职位'].str.contains('经理', case=False)]

5. 范围查询和isin

# 年龄在25到35之间(包含边界) df[df['年龄'].between(25, 35)] # 部门属于指定列表 df[df['部门'].isin(['销售部', '市场部', '技术部'])] # 工资在前10名 df[df['工资'].isin(df['工资'].nlargest(10))]

完整代码示例

import pandas as pd # 读取员工信息表 df = pd.read_csv('employees.csv') # ===== 单条件筛选 ===== print("=== 年龄大于30岁的员工 ===") print(df[df['年龄'] > 30]) print("\n=== 部门是技术部的员工 ===") print(df[df['部门'] == '技术部']) # ===== 多条件组合 ===== print("\n=== 技术部且年龄大于28岁的员工 ===") print(df[(df['部门'] == '技术部') & (df['年龄'] > 28)]) print("\n=== 工资高于8000或入职年限大于3年的员工 ===") print(df[(df['工资'] > 8000) | (df['入职年限'] > 3)]) # ===== loc用法 ===== print("\n=== 用loc选取前5行的姓名和工资 ===") print(df.loc[0:4, ['姓名', '工资']]) # 用loc修改数据 df.loc[df['部门'] == '销售部', '绩效奖金'] = 500 # ===== iloc用法 ===== print("\n=== 用iloc选取前3行、前4列 ===") print(df.iloc[0:3, 0:4]) # ===== 字符串匹配 ===== print("\n=== 姓名中包含'张'的员工 ===") print(df[df['姓名'].str.contains('张', na=False)]) print("\n=== 职位以'高级'开头的员工 ===") print(df[df['职位'].str.startswith('高级')]) # ===== 范围查询 ===== print("\n=== 年龄在25到35之间的员工 ===") print(df[df['年龄'].between(25, 35)]) print("\n=== 部门属于销售部或市场部的员工 ===") print(df[df['部门'].isin(['销售部', '市场部'])])

实操步骤

  1. 读取employees.csv,用 df.head() 查看数据结构
  2. 练习单条件筛选:找出所有工资大于6000的员工
  3. 练习多条件"且":找出技术部且年龄大于28岁的员工
  4. 练习多条件"或":找出销售部或市场部的员工
  5. loc 选取指定列(如姓名、部门、工资)
  6. iloc 选取前10行、前3列
  7. str.contains() 查找姓名中包含某个字的员工
  8. between() 筛选年龄在某个范围的员工
  9. isin() 筛选部门属于指定列表的员工

配套数据集:employees.csv

姓名,年龄,部门,职位,工资,入职年限 张伟,32,技术部,高级工程师,12000,5 李娜,28,销售部,销售经理,8500,3 王强,35,市场部,市场总监,15000,8 赵敏,26,技术部,工程师,7000,2 钱多多,30,销售部,销售代表,6000,4 孙丽,29,人事部,人事专员,5500,3 周杰,33,技术部,技术主管,11000,6 吴芳,27,市场部,市场专员,6500,2 郑华,31,财务部,财务经理,9000,5 陈静,24,销售部,销售助理,4500,1
交互式练习题
0/7
第1题 选择题
筛选年龄大于25岁的员工,正确的写法是?
A. df['年龄' > 25]
B. df[df['年龄'] > 25]
C. df.filter('年龄' > 25)
D. df.select('年龄' > 25)
答案解析

条件筛选的语法是df[条件],条件内部要写df['列名'] > 值

第2题 选择题
多条件"且"的组合,应该使用哪个符号?
A. and
B. &&
C. &
D. +
答案解析

pandas中多条件组合用&表示"且",|表示"或",每个条件要用圆括号括起来。

第3题 选择题
loc和iloc的主要区别是?
A. loc按位置,iloc按标签
B. loc按标签,iloc按位置
C. loc只能取行,iloc只能取列
D. 两者没有区别
答案解析

loc按标签(行名/列名)定位,iloc按整数位置(第几行/第几列)定位。

第4题 填空题
筛选姓名中包含"张"的员工,应写为:df[df['姓名'].str.('张', na=False)]
答案解析

str.contains()用于判断字符串是否包含指定子串,na=False表示对缺失值返回False而不是报错。

第5题 选择题
筛选部门属于['销售部','市场部']的员工,应该用?
A. df['部门'].in(['销售部','市场部'])
B. df['部门'].isin(['销售部','市场部'])
C. df['部门'].include(['销售部','市场部'])
D. df['部门'].has(['销售部','市场部'])
答案解析

isin()用于判断元素是否属于指定列表,相当于SQL中的IN操作。

第6题 判断题
df.iloc[0:3, 0:2] 会选取第0、1、2行和第0、1列。
正确
错误
答案解析

iloc切片遵循Python左闭右开规则,0:3表示索引0、1、2,0:2表示索引0、1。

第7题 选择题
筛选年龄在25到35之间(包含边界),应该用?
A. df['年龄'].range(25, 35)
B. df['年龄'].between(25, 35)
C. df['年龄'].inrange(25, 35)
D. df['年龄'].scope(25, 35)
答案解析

between()方法用于判断数值是否在指定范围内,默认包含边界。

0/7

项目小结

本项目我们学习了数据筛选与查询的核心技能:

  • df[条件] 进行单条件筛选
  • &| 进行多条件组合筛选
  • loc 按标签名选取行列
  • iloc 按位置索引选取行列
  • str.contains()str.startswith() 进行字符串匹配
  • between() 进行范围查询
  • isin() 进行列表包含查询

掌握了筛选查询,你就能从海量数据中精准找到需要的信息,是数据分析的核心能力之一。

← 上一项目:数据清洗与预处理 下一项目:数据分组与聚合分析 →