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 - q1low = q1 - 1.5 * iqrhigh = q3 + 1.5 * iqroutliers = df[(df["amount"] < low) | (df["amount"] > high)]print(outliers.head())IQR 适合快速筛选,但不能替代业务判断。不同业务的正常范围差异很大。
业务规则更重要
比如年龄小于 0 或大于 120 基本是错误;订单金额为负可能是退款;图片宽高为 0 一定要排查数据读取。
异常值处理要记录原因:删除、截断、单独分析,还是保留。
处理前后对比
-
异常值数量占比。
-
删除后样本量变化。
-
关键指标是否大幅变化。
-
被处理的记录能否追溯到原始 ID。
实战复盘
复用《pandas 异常值检查》时,不要只复制代码块。先把自己的字段名、数据口径和异常规则写出来,再替换示例里的列名。pandas 的函数很通用,但业务字段的含义不能自动迁移。
每次处理完成后,我会抽样看几条原始记录和处理后记录。尤其是日期、金额、分类字段,机器统计和肉眼抽查要一起做,才能发现格式看似正常但含义错位的问题。
这类文章后续可以继续补充真实小表格作为输入示例。输入、处理、输出三者都出现,教程才不会变成只解释 API。
最小验收样例
验收《pandas 异常值检查》时,我会手写一个三到五行的小 DataFrame:一行正常数据,一行缺失或异常数据,一行边界数据。先让示例在小表上跑通,再换成完整数据集。
小表的好处是结果可以人工计算。只要人工结果和 pandas 输出对不上,就说明代码逻辑或字段口径还没想清楚。这个过程比直接在大表上调试更可靠。
小结
异常值检查的核心是发现和解释,而不是一键删除。统计方法负责筛出来,业务判断负责决定怎么处理。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!













