📖 知识点回顾
pd.DataFrame()/ 读文件 读入数据drop_duplicates()去重isnull().sum()查缺失、fillna()填充、dropna()删除astype()类型转换replace()替换值、rename()改列名concat/merge合并
💡 清洗流水线(标准套路) 读入 → 看概览 → 去重 → 处理缺失 → 类型规范 → 值 / 列名统一 → 排序 → 得到干净数据
⚔️ Kata 实战任务
任务需求:
- 导入 pandas,创建一份含脏数据的销售表(有重复行、缺失值、文本数字、叫法不一)
- 查看原始数据概览(head /info/isnull)
- 去重:
drop_duplicates() - 补缺:用均值填充数值缺失
- 规范:把文本数字
astype转成数字,rename改列名 - 排序:按销量降序
- 输出清洗前后的对比总结
参考代码
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
🧠 思考题
- 清洗流水线里,"去重、补缺、类型转换" 每一步解决的是什么 "脏" 问题?
- 如果这份数据是从 CSV 文件读入的,第 1 步要怎么改?清洗完的数据该怎么保存回文件(提示:
to_csv)?
行者孙Python