文章
Python 首批细教程 · 06A:用 Pandas 做一次真正的数据清洗和统计
阅读数据加载中…
点赞数据加载中…
对应原仓库:
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。- 明明是分析问题,却一上来就想训练模型。