学径XUEJING · 个人学习平台通知设置

课程库 AI 主线 pandas 数据处理 › 第 8

单元测验 + 数据清洗挑战

里程碑50 分钟

本课导读

U1.5 关卡。pandas 八课的功夫在这里过秤:第一关综合测验 10 题;第二关数据清洗挑战——一份五毒俱全的真实风格脏表,要求你独立走完"体检 → 清洗 → 分析 → 结论"全流程。这正是数据岗面试上机题的标准形态。预计 50 分钟。

赛前热身:本单元的知识地图

一句话回顾
1. Notebook 工作流单元格独立跑、变量跨格活;乱了就 Restart & Run All
2. DataFrame 直觉会呼吸的 Excel;单列是 Series;整列运算替代循环
3. 读取与查看read_csv 自动转类型;三板斧 head/info/describe
4. 选取与过滤列用方括号、行用 loc/iloc;布尔筛选 `&
5. 清洗数据流水线:去重→to_numeric(coerce)→str.strip→缺失删/补
6. 分组聚合groupby 口诀“按什么分、看什么列、算什么数”;agg 出报表
7. 合并数据表merge 横接(how=left 保左表);concat 纵摞;前后核行数

第一关:综合测验

随堂测验0 / 10 题正确

1. Notebook 里第 3 格能用第 1 格定义的变量,是因为?

2. df["price"] * 0.8 不写循环就对每个元素生效,这个特性叫什么、意味着什么?

3. 拿到新数据的“体检三板斧”是?

4. df[(df["amount"] > 100) & (df["city"] == "上海")] 若把 & 写成 and 会?

5. 一列数字里混进“补录中”三个字,read_csv 后这列会?

6. df["city"].str.strip() 解决的典型事故是?

7. “各产品的总额、均值、单数一次算齐并降序”,最顺的写法是?

8. 订单表 merge 客户表后行数从 500 变成 430,第一反应应该是?

9. 两个月度文件列结构相同要合成一张表,用什么?

10. 完整的数据分析动作顺序是?

第二关:数据清洗挑战

你是电商公司新来的数据助理。运营扔给你一份导出事故频发的季度订单表,附一句话:"帮我看下各城市的有效销售额排名,还有咱们到底有多少笔有效订单。"

数据的毒(自己用三板斧找全):重复行、城市脏格式、金额混文字、关键列缺失。

要求:① 清洗全程可复现(代码即报告)② 清洗前后行数变化要打印说明 ③ 最后输出排名 + 有效订单数 + 一句话结论。

Python
💡 提示(先自己走流程,卡住再看)

流水线顺序:drop_duplicatesto_numeric(errors="coerce")str.stripdropna(subset=["amount"])groupby("city")["amount"].sum().sort_values(ascending=False)。每步之后 print(len(df)) 留下脚印。

✅ 参考实现(做完再对照)
import pandas as pd

raw = """order_id,city,product,amount
5001, 上海,键盘,299
5002,北京 ,鼠标,178
5003,上海,显示器,1599
5003,上海,显示器,1599
5004,深圳,键盘,售后处理
5005, 北京,耳机,459
5006,上海,鼠标,
5007,广州 ,键盘,897
5008,北京,显示器,1599
5008,北京,显示器,1599"""
with open("q_orders.csv", "w", encoding="utf-8") as f:
    f.write(raw)
df = pd.read_csv("q_orders.csv")

# ── 体检 ──
df.info()
print(f"原始 {len(df)} 行")

# ── 清洗流水线 ──
df = df.drop_duplicates()
print(f"去重后 {len(df)} 行")

df["amount"] = pd.to_numeric(df["amount"], errors="coerce")
df["city"] = df["city"].str.strip()

df = df.dropna(subset=["amount"])
print(f"剔除无效金额后 {len(df)} 行")

# ── 分析 ──
rank = df.groupby("city")["amount"].sum().sort_values(ascending=False)
print(rank)

# ── 结论 ──
print(f"结论:有效订单 {len(df)} 笔;{rank.index[0]} 以 {rank.iloc[0]:.0f} 元居首。")

对照检查四个专业细节:① 每步 print 行数——清洗轨迹可审计;② strip 在 groupby 之前——否则北京分裂;③ coerce 在 dropna 之前——"售后处理"先变 NaN 才能一起删;④ 结论一句话带数字——运营要的是答案不是表格。10 行 → 去重 8 行 → 有效 6 行,能对上这串数字就是满分。

提示

把这个挑战的代码存进你的 Notebook,命名 cleaning-drill.ipynb 推上 GitHub——数据岗面试的上机题十有八九就是这个形状:"给你一份脏数据,出一个结论"。你已经会了。

通关小结

U1.5 拿下,你已经具备初级数据分析师的核心操作面

  • 进出:read_csv 进货(自动类型)、to_csv 出货;Notebook 是工作台
  • 整备:三板斧体检、五步清洗流水线——数据 80% 的功夫在这
  • 拷问:布尔筛选指哪打哪、groupby+agg 出报表、merge/concat 跨表作战
  • 素养:整列思考、先洗后问、前后核数、结论带数字

下个单元给数据装上眼睛:matplotlib 可视化——让老板一眼看懂你算出来的东西。

划选正文任意文字可高亮、批注或加入复习卡

讨论

载入中…