Day 103 — Pandas 进阶:练习检查表
✅ 今日学习完成清单
- [ ] 掌握缺失值检测、删除和多种填充策略
- [ ] 理解重复值检测与去重策略
- [ ] 熟练进行数据类型转换
- [ ] 能用 IQR 方法检测和处理异常值
- [ ] 掌握 groupby 的 agg/transform/filter/apply 用法
- [ ] 理解 merge 的 inner/left/right/outer 连接类型
- [ ] 掌握 concat 的纵向/横向拼接
- [ ] 熟练使用 resample 进行时间序列聚合
- [ ] 掌握 rolling/ewm 滚动窗口计算
- [ ] 完成所有代码示例的运行和理解
练习题
基础题
练习 1:数据清洗
给定以下包含各种问题的数据:
python
import pandas as pd
import numpy as np
df = pd.DataFrame({
'姓名': ['张三', '李四', '张三', None, '赵六', '李四', '钱七'],
'部门': ['技术', '产品', '技术', '设计', None, '产品', '运营'],
'薪资': [18000, 22000, 18000, 16000, 25000, np.nan, 15000],
'入职日期': ['2020-01-15', '2019-03-20', '2020-01-15', '2021-06-15',
'2018-11-01', '2019-03-20', '2022-08-10']
})
完成: 1. 检测并处理缺失值 2. 删除重复行 3. 转换数据类型 4. 输出清洗后的完整数据
练习 2:分组聚合
使用以下数据:
python
df = pd.DataFrame({
'班级': ['A', 'A', 'B', 'B', 'A', 'B', 'A', 'B'],
'学生': ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十'],
'数学': [85, 92, 78, 88, 95, 72, 82, 90],
'英语': [78, 85, 92, 75, 88, 80, 75, 95]
})
计算: 1. 每个班级的平均分 2. 每个学生的总分 3. 每个班级中数学最高分的学生 4. 用 transform 给每个学生添加"班级排名"列
练习 3:数据合并
创建员工表和考勤表,用不同方式合并:
python
employees = pd.DataFrame({
'工号': ['E001', 'E002', 'E003', 'E004'],
'姓名': ['张三', '李四', '王五', '赵六']
})
attendance = pd.DataFrame({
'工号': ['E001', 'E002', 'E005'],
'出勤天数': [22, 20, 21]
})
展示内连接、左连接、外连接的区别。
进阶题
练习 4:时间序列分析
创建一年的模拟销售数据(日粒度),然后: 1. 计算每周、每月、每季度的销售额 2. 计算 7 天和 30 天移动平均 3. 找出销售额最高的一天和最低的一天 4. 计算同比增长率(模拟两年数据)
练习 5:完整数据分析报告
从头到尾完成一个数据分析项目: 1. 创建包含 1000 行的模拟数据(产品、渠道、日期、金额等) 2. 数据清洗(处理缺失值、异常值) 3. 分组分析(产品、渠道、城市维度) 4. 时间趋势分析 5. 生成交叉分析表 6. 输出分析结论
运行验证
bash
cd ~/code/Learn-Python
python3 days/day-103-pandas-advanced/code/01-data-cleaning.py
python3 days/day-103-pandas-advanced/code/02-groupby-merge.py
python3 days/day-103-pandas-advanced/code/03-timeseries-practical.py