Day 080 — Pandas 数据分析 · 练习清单
✅ 今日完成清单
- [ ] 理解 Series 与 DataFrame 的区别和联系
- [ ] 掌握 DataFrame 的创建方式(字典、NumPy、文件)
- [ ] 熟练使用 loc / iloc 进行数据索引
- [ ] 掌握条件筛选与布尔索引
- [ ] 学会 CSV / Excel / JSON 的读写操作
- [ ] 掌握缺失值处理(dropna / fillna / interpolate)
- [ ] 掌握重复值处理(duplicated / drop_duplicates)
- [ ] 理解 GroupBy 分组聚合的工作流程
- [ ] 掌握透视表(pivot_table)的使用
- [ ] 学会 DataFrame 合并(merge / concat / join)
- [ ] 完成代码示例运行与调试
📝 基础练习题
练习 1:员工数据分析
给定以下员工数据:
import pandas as pd
employees = pd.DataFrame({
'姓名': ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十'],
'部门': ['技术', '销售', '技术', '人事', '销售', '技术', '人事', '销售'],
'薪资': [15000, 8000, 18000, 12000, 9000, 16000, 11000, 7500],
'入职年份': [2019, 2021, 2018, 2020, 2022, 2020, 2021, 2023]
})
要求: 1. 找出所有技术部员工的姓名和薪资 2. 计算各部门的平均薪资 3. 找出入职最早和最晚的员工 4. 计算薪资中位数,找出薪资高于中位数的员工
练习 2:缺失值处理
import pandas as pd
import numpy as np
data = pd.DataFrame({
'A': [1, 2, np.nan, 4, 5, np.nan, 7],
'B': [np.nan, 2, 3, np.nan, 5, 6, np.nan],
'C': ['x', None, 'z', 'w', None, 'v', 'u']
})
要求: 1. 统计每列的缺失值数量和比例 2. 用均值填充 A 列的缺失值 3. 用前向填充处理 B 列 4. 用 "未知" 填充 C 列 5. 删除含有任何缺失值的行,观察剩余数据量
练习 3:GroupBy 练习
import pandas as pd
sales = pd.DataFrame({
'月份': ['1月', '1月', '2月', '2月', '3月', '3月'] * 2,
'产品': ['A', 'B'] * 6,
'地区': ['北京', '上海', '北京', '广州', '深圳', '上海'] * 2,
'销售额': [1000, 1500, 1200, 800, 2000, 1300, 1100, 1600, 1300, 900, 2100, 1400]
})
要求: 1. 按月份统计总销售额 2. 按产品和地区分组,计算平均销售额 3. 使用 pivot_table 创建"月份 × 产品"的销售额透视表 4. 找出销售额最高的 3 笔订单
🚀 进阶挑战题
挑战 1:数据清洗全流程
从零开始处理一个"脏"数据集: - 生成 500 行含缺失值、重复行、异常值的数据 - 编写完整的清洗流程(按顺序:去重 → 异常值 → 缺失值 → 类型转换) - 记录每一步处理前后的数据形状变化 - 对比清洗前后的统计指标差异
挑战 2:多表合并分析
模拟一个简单的电商系统,包含 3 张表:
- orders(订单表):订单ID、客户ID、产品ID、数量、日期
- customers(客户表):客户ID、姓名、城市
- products(产品表):产品ID、产品名、类别、价格
任务: 1. 合并 3 张表,生成完整的订单明细 2. 计算每个城市的总消费额 3. 找出复购率最高的客户(购买次数 > 1) 4. 分析各产品类别的销售占比
挑战 3:性能对比
对比以下操作的性能差异:
- df.apply(lambda x: x * 2) vs df * 2
- df.groupby('col').apply(lambda x: x.mean()) vs df.groupby('col').mean()
- df[df['col'] == 'A'] vs df.query('col == "A"')
使用 timeit 模块测量执行时间,分析性能差异的原因。