Pandas 中文手册

8.4 异常值检查(outliers)

Pandas异常值检查完全指南 | 定义、统计方法、可视化方法与逻辑错误检查

Pandas 中文手册

本Pandas学习章节详细讲解异常值检查的定义与常见类型(极值、异常波动、逻辑错误),介绍统计方法(四分位法、Z-score法)和可视化方法(箱线图、直方图),并提供逻辑错误检查示例,帮助数据科学新手轻松掌握异常值处理。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

异常值检查

引言

异常值(Outliers)是指在数据集中与其他观测值显著不同的点,可能是由于测量错误、数据录入问题或自然变异等原因造成。在数据分析中,检查异常值至关重要,因为它们可能歪曲统计结果或影响模型性能。使用Pandas可以轻松识别和处理异常值,确保数据质量。

异常值的定义与常见类型

异常值通常分为三类:

  • 极值(Extreme Values):数值极端高或低,如某个学生的考试分数远高于或低于平均水平。
  • 异常波动(Anomalous Fluctuations):数据中出现非典型的波动或模式,例如股价在短时间内剧烈波动。
  • 逻辑错误(Logical Errors):值在逻辑上不合理,如年龄为负数或日期在未来(不合理)。

理解这些类型有助于有针对性地进行检查和清理。

用统计方法检查异常值

统计方法基于数学公式识别异常值,Pandas结合NumPy或SciPy库可实现高效计算。

四分位法(IQR)

四分位法使用数据的四分位数范围(IQR)来检测异常值。IQR是数据第75百分位数(Q3)与第25百分位数(Q1)的差。

  • 公式:IQR = Q3 - Q1;异常值定义为小于 Q1 - 1.5 * IQR 或大于 Q3 + 1.5 * IQR 的值。

Pandas代码示例:

import pandas as pd
import numpy as np

# 假设df是数据集,column是要检查的列
df = pd.DataFrame({'score': [10, 20, 30, 40, 50, 100, 200]})
Q1 = df['score'].quantile(0.25)
Q3 = df['score'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers_iqr = df[(df['score'] < lower_bound) | (df['score'] > upper_bound)]
print(outliers_iqr)
# 输出可能显示异常值,如100和200

Z-score法

Z-score法通过计算每个值与均值的标准差倍数来识别异常值,通常认为Z-score绝对值大于3的点是异常值。

  • 公式:Z-score = (x - 均值) / 标准差。

Pandas代码示例:

from scipy.stats import zscore

# 使用相同数据集
df['z_score'] = zscore(df['score'])
outliers_z = df[abs(df['z_score']) > 3]
print(outliers_z)
# 输出异常值点

用可视化方法检查异常值

可视化方法直观显示数据分布,帮助快速识别异常。Pandas集成Matplotlib可以轻松绘图。

箱线图(Box Plot)

箱线图展示数据的五数概括(最小值、Q1、中位数、Q3、最大值),并标记异常值(通常为点)。

Pandas代码示例:

import matplotlib.pyplot as plt

df['score'].plot(kind='box')
plt.title('Score Box Plot')
plt.show()
# 箱线图会显示超出whiskers的异常点

直方图(Histogram)

直方图展示数据频率分布,异常值可能表现为远离主要分布的条柱。

Pandas代码示例:

df['score'].plot(kind='hist', bins=10, edgecolor='black')
plt.title('Score Histogram')
plt.xlabel('Score')
plt.ylabel('Frequency')
plt.show()
# 查看是否有孤立的高频或低频区域

逻辑错误检查

逻辑错误检查基于常识或业务规则,使用Pandas的条件筛选可以快速发现。

Pandas代码示例:

# 检查年龄为负
age_outliers = df[df['age'] < 0]
print(age_outliers)

# 检查日期不合理,如未来日期
from datetime import datetime
current_date = datetime.now()
date_outliers = df[df['date'] > current_date]  # 假设df有date列
print(date_outliers)

# 其他例子:检查收入为负或不合逻辑的范围
income_outliers = df[df['income'] < 0]
print(income_outliers)

总结

在Pandas中检查异常值时,建议结合多种方法:首先用统计方法(如四分位法或Z-score法)进行初步筛选,然后用可视化方法(箱线图、直方图)验证,最后检查逻辑错误以确保数据逻辑一致性。这能帮助新手有效清理数据,提高分析准确性。实践中,根据数据特征和业务需求调整阈值和方法。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包