← 返回 Day 80 正文

Day 80 · 练习与清单

Day 080 — Pandas 数据分析 · 练习清单


✅ 今日完成清单


📝 基础练习题

练习 1:员工数据分析

给定以下员工数据:

python
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:缺失值处理

python
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 练习

python
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 模块测量执行时间,分析性能差异的原因。