pandas 异常值检查

668 字
3 分钟
pandas 异常值检查

pandas 异常值检查#

异常值不一定是脏数据。一个特别大的订单金额可能是录入错误,也可能是真实的大客户。检查异常值的目的不是自动删除,而是把需要确认的记录找出来。

我通常会结合统计分布、业务范围和原始记录来判断。

先做描述统计#

print(df["amount"].describe(percentiles=[0.01, 0.05, 0.95, 0.99]))
print(df.nlargest(10, "amount")[["order_id", "amount", "user_id"]])

最大值、99 分位数和均值之间差距很大时,就要进一步看极端记录。

IQR 方法#

q1 = df["amount"].quantile(0.25)
q3 = df["amount"].quantile(0.75)
iqr = q3 - q1
low = q1 - 1.5 * iqr
high = q3 + 1.5 * iqr
outliers = df[(df["amount"] < low) | (df["amount"] > high)]
print(outliers.head())

IQR 适合快速筛选,但不能替代业务判断。不同业务的正常范围差异很大。

业务规则更重要#

比如年龄小于 0 或大于 120 基本是错误;订单金额为负可能是退款;图片宽高为 0 一定要排查数据读取。

异常值处理要记录原因:删除、截断、单独分析,还是保留。

处理前后对比#

  • 异常值数量占比。

  • 删除后样本量变化。

  • 关键指标是否大幅变化。

  • 被处理的记录能否追溯到原始 ID。

实战复盘#

复用《pandas 异常值检查》时,不要只复制代码块。先把自己的字段名、数据口径和异常规则写出来,再替换示例里的列名。pandas 的函数很通用,但业务字段的含义不能自动迁移。

每次处理完成后,我会抽样看几条原始记录和处理后记录。尤其是日期、金额、分类字段,机器统计和肉眼抽查要一起做,才能发现格式看似正常但含义错位的问题。

这类文章后续可以继续补充真实小表格作为输入示例。输入、处理、输出三者都出现,教程才不会变成只解释 API。

最小验收样例#

验收《pandas 异常值检查》时,我会手写一个三到五行的小 DataFrame:一行正常数据,一行缺失或异常数据,一行边界数据。先让示例在小表上跑通,再换成完整数据集。

小表的好处是结果可以人工计算。只要人工结果和 pandas 输出对不上,就说明代码逻辑或字段口径还没想清楚。这个过程比直接在大表上调试更可靠。

小结#

异常值检查的核心是发现和解释,而不是一键删除。统计方法负责筛出来,业务判断负责决定怎么处理。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

pandas 异常值检查
https://blog.tjcheng.cn/posts/backfill/2026-05-20/pandas-outlier-check/
作者
TengJinCheng
发布于
2026-05-20
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
TengJinCheng
Hello, I'm Teng.
公告
欢迎来到TengJinCheng工作铺!
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
157
分类
7
标签
114
总字数
109,939
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.4
文章许可
CC BY-NC-SA 4.0

文章目录