Python 首批细教程 · 06A:用 Pandas 做一次真正的数据清洗和统计
承上启下:在上一篇《Python 首批细教程 · 05A:别一上来就爬站,先把 requests、XPath、BS4 这条链跑通》中,我们通过抓取与解析的解耦,实现了互联网非结构化数据的落地。但海量的原始数据若包含空值、缺失或噪声,直接使用则无法体现其商业价值。本篇中,我们将进入数据智能与分析阶段,利用业界流行的数据分析利器
pandas库,从读取 CSV、缺失值清洗,一路跑通多维分组聚合(groupby)与透视表(pivot_table)的经典报表开发链路。
对应原仓库:
66.数据分析概述.md、70.Pandas的应用-1.md已提供可运行示例:
/tutorial-assets/python-100-days/06a-pandas-clean-report/(站点源码路径:blog-src/static/tutorial-assets/python-100-days/06a-pandas-clean-report/)
Pandas 真正值钱的不是 DataFrame 这个名词,而是:你能不能把一张乱表快速清干净,再给出统计结果。
准备数据
示例目录已经提供 sales.csv(站点源码路径:blog-src/static/tutorial-assets/python-100-days/06a-pandas-clean-report/sales.csv):
shop,category,amount
A,水果,120
A,零食,80
B,水果,150
B,零食,
C,水果,90
C,零食,110
Step 1:读表
import pandas as pd
df = pd.read_csv("sales.csv")
print(df)
Step 2:检查缺失值
print(df.isna().sum())
这里你会发现 amount 有一个空值。
Step 3:填补缺失值
df["amount"] = df["amount"].fillna(0)
print(df)
Step 4:做分组统计
report = df.groupby("category")["amount"].sum()
print(report)
输出类似:
category
水果 360.0
零食 190.0
Name: amount, dtype: float64
Step 5:按门店做透视
pivot = df.pivot_table(
index="shop",
columns="category",
values="amount",
aggfunc="sum",
fill_value=0
)
print(pivot)
这一步就是从“数据表”过渡到“业务视图”。
完整脚本
示例目录已经提供 pandas_report.py(站点源码路径:blog-src/static/tutorial-assets/python-100-days/06a-pandas-clean-report/pandas_report.py):
import pandas as pd
df = pd.read_csv("sales.csv")
df["amount"] = df["amount"].fillna(0)
print("=== 原始数据 ===")
print(df)
print()
print("=== 按品类汇总 ===")
print(df.groupby("category")["amount"].sum())
print()
print("=== 门店 x 品类透视表 ===")
print(
df.pivot_table(
index="shop",
columns="category",
values="amount",
aggfunc="sum",
fill_value=0
)
)
进阶任务
- 增加一列
day,按天统计。 - 增加异常值,比如
-100,自己决定怎么清洗。 - 输出
amount的均值、最大值、最小值。
常见坑
fillna(0)后忘了重新赋值。groupby之后不知道返回的是Series还是DataFrame。- 明明是分析问题,却一上来就想训练模型。
💡 下一篇预告:借助 Pandas,我们完成了基础的数据清洗与多维报表分析,获得了清晰的业务概览视图。但在真正的数据科学与数据智能应用中,从统计学报表迈向机器学习预测才是关键性飞跃。在下一篇《Python 首批细教程 · 06B:用一个小例子彻底看懂 kNN 怎么分类》中,我们将走近经典的监督学习算法,使用
scikit-learn编写一个极简的 k 近邻(kNN)电影分类预测系统,彻底理清模型训练与分类决策的基本原理。