项目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(['销售部', '市场部'])])
实操步骤
- 读取employees.csv,用
df.head()查看数据结构 - 练习单条件筛选:找出所有工资大于6000的员工
- 练习多条件"且":找出技术部且年龄大于28岁的员工
- 练习多条件"或":找出销售部或市场部的员工
- 用
loc选取指定列(如姓名、部门、工资) - 用
iloc选取前10行、前3列 - 用
str.contains()查找姓名中包含某个字的员工 - 用
between()筛选年龄在某个范围的员工 - 用
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岁的员工,正确的写法是?
答案解析
条件筛选的语法是df[条件],条件内部要写df['列名'] > 值。
第2题
选择题
多条件"且"的组合,应该使用哪个符号?
答案解析
pandas中多条件组合用&表示"且",|表示"或",每个条件要用圆括号括起来。
第3题
选择题
loc和iloc的主要区别是?
答案解析
loc按标签(行名/列名)定位,iloc按整数位置(第几行/第几列)定位。
第4题
填空题
筛选姓名中包含"张"的员工,应写为:df[df['姓名'].str.('张', na=False)]
答案解析
str.contains()用于判断字符串是否包含指定子串,na=False表示对缺失值返回False而不是报错。
第5题
选择题
筛选部门属于['销售部','市场部']的员工,应该用?
答案解析
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之间(包含边界),应该用?
答案解析
between()方法用于判断数值是否在指定范围内,默认包含边界。
0/7
项目小结
本项目我们学习了数据筛选与查询的核心技能:
- 用
df[条件]进行单条件筛选 - 用
&和|进行多条件组合筛选 - 用
loc按标签名选取行列 - 用
iloc按位置索引选取行列 - 用
str.contains()、str.startswith()进行字符串匹配 - 用
between()进行范围查询 - 用
isin()进行列表包含查询
掌握了筛选查询,你就能从海量数据中精准找到需要的信息,是数据分析的核心能力之一。