文章

Python 首批细教程 · 06A:用 Pandas 做一次真正的数据清洗和统计

#274 · 2026-05-13 · Python 教程拆解

对应原仓库66.数据分析概述.md70.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
    )
)

进阶任务

  1. 增加一列 day,按天统计。
  2. 增加异常值,比如 -100,自己决定怎么清洗。
  3. 输出 amount 的均值、最大值、最小值。

常见坑

  • fillna(0) 后忘了重新赋值。
  • groupby 之后不知道返回的是 Series 还是 DataFrame
  • 明明是分析问题,却一上来就想训练模型。