行者孙Python

择洗篇-Day16|厨房实战 Kata:完整清洗流程:读入 → 去重 → 补缺 → 规范

📖 知识点回顾

  1. pd.DataFrame() / 读文件 读入数据
  2. drop_duplicates() 去重
  3. isnull().sum() 查缺失、fillna() 填充、dropna() 删除
  4. astype() 类型转换
  5. replace() 替换值、rename() 改列名
  6. concat / merge 合并

💡 清洗流水线(标准套路) 读入 → 看概览 → 去重 → 处理缺失 → 类型规范 → 值 / 列名统一 → 排序 → 得到干净数据

⚔️ Kata 实战任务

任务需求:

  1. 导入 pandas,创建一份含脏数据的销售表(有重复行、缺失值、文本数字、叫法不一)
  2. 查看原始数据概览(head /info/isnull)
  3. 去重:drop_duplicates()
  4. 补缺:用均值填充数值缺失
  5. 规范:把文本数字 astype 转成数字,rename 改列名
  6. 排序:按销量降序
  7. 输出清洗前后的对比总结

参考代码

import pandas as pd

# 一份"脏"采购销售表
data = {
    "菜品": ["白菜", "番茄", "白菜", "土豆", "黄瓜", "番茄"],
    "价格": ["3", "5", "3", "2", "4", "5"],
    "销量": [10, None, 10, 30, 15, 25],
}
df = pd.DataFrame(data)
print("===== 原始脏数据 =====")
print(df)
print("\n缺失情况:\n", df.isnull().sum())

# ===== 清洗流水线 =====
# 1. 去重
df = df.drop_duplicates()
print("\n===== 去重后 =====")
print(df)

# 2. 补缺:销量均值填充缺失
df["销量"] = df["销量"].fillna(df["销量"].mean())
print("\n===== 填充缺失后 =====")
print(df)

# 3. 规范:价格文本转数字、销量转整数、改列名
df["价格"] = df["价格"].astype(int)
df["销量"] = df["销量"].astype(int)
df = df.rename(columns={"菜品": "菜名"})
print("\n===== 类型+列名规范后 =====")
print(df)

# 4. 排序:按销量降序
df = df.sort_values("销量", ascending=False)
print("\n===== 清洗完成,按销量降序 =====")
print(df)
print("\n✅ 数据类型:")
print(df.dtypes)

运行输出:

===== 原始脏数据 =====
   菜品  价格    销量
0  白菜    3   10.0
1  番茄    5    NaN
2  白菜    3   10.0
3  土豆    2   30.0
4  黄瓜    4   15.0
5  番茄    5   25.0

缺失情况:
菜品    0
价格    0
销量    1
dtype: int64

===== 去重后 =====
   菜品  价格    销量
0  白菜    3   10.0
1  番茄    5    NaN
3  土豆    2   30.0
4  黄瓜    4   15.0
5  番茄    5   25.0

===== 填充缺失后 =====
   菜品  价格    销量
0  白菜    3   10.0
1  番茄    5   20.0
3  土豆    2   30.0
4  黄瓜    4   15.0
5  番茄    5   25.0

===== 类型+列名规范后 =====
   菜名  价格  销量
0  白菜    3   10
1  番茄    5   20
3  土豆    2   30
4  黄瓜    4   15
5  番茄    5   25

===== 清洗完成,按销量降序 =====
   菜名  价格  销量
3  土豆    2   30
5  番茄    5   25
1  番茄    5   20
4  黄瓜    4   15
0  白菜    3   10

✅ 数据类型:
菜名    object
价格     int64
销量     int64
dtype: object

🧠 思考题

  1. 清洗流水线里,"去重、补缺、类型转换" 每一步解决的是什么 "脏" 问题?
  2. 如果这份数据是从 CSV 文件读入的,第 1 步要怎么改?清洗完的数据该怎么保存回文件(提示:to_csv)?
‹ 返回目录
🏠首页 Python 📦资源 👤关于我