数据清洗实战:Pandas处理缺失值与异常值的5种方法

数据清洗是数据分析的关键步骤,能提升数据质量和模型准确性。在Python中,Pandas库提供了高效的工具处理缺失值(如NaN)和异常值(如离群点)。下面我将逐步介绍5种实用方法,每种方法包括原理解释、适用场景和代码示例。所有方法基于Pandas实现,确保实战可行性。假设您已导入Pandas:import pandas as pd


方法1:删除缺失值(直接删除法)

原理:直接移除包含缺失值的行或列,适用于缺失比例小且删除后不影响分析的数据。
数学基础:若数据集有$n$行,缺失值比例为$p$,删除后保留行数为$n(1-p)$。
适用场景:数据量大、缺失值少(如$p < 5%$)。
代码示例

# 删除包含缺失值的行
df_cleaned = df.dropna(axis=0)  # axis=0表示行,axis=1表示列

# 删除包含缺失值的列
df_cleaned = df.dropna(axis=1)


方法2:填充缺失值(均值/中位数填充)

原理:用统计量(如均值、中位数)替换缺失值,保持数据分布。适用于数值型数据。
数学基础:均值$\bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i$,中位数是排序后的中间值。
适用场景:数据分布均匀,缺失值随机。
代码示例

# 用均值填充数值列
mean_value = df['column_name'].mean()
df_filled = df.fillna({'column_name': mean_value})

# 用中位数填充
median_value = df['column_name'].median()
df_filled = df.fillna({'column_name': median_value})


方法3:插值法(线性插值)

原理:基于相邻数据点进行线性插值,适合时间序列数据。
数学基础:线性插值公式为: $$ y = y_1 + \frac{(x - x_1)(y_2 - y_1)}{x_2 - x_1} $$ 其中$x$是缺失位置,$x_1$和$x_2$是相邻点。
适用场景:有序数据(如时间序列),缺失值连续。
代码示例

# 对时间序列列进行线性插值
df_interpolated = df['column_name'].interpolate(method='linear')


方法4:识别异常值(Z-score法)

原理:用Z-score识别异常值,Z-score绝对值大于阈值(如3)视为异常。
数学基础:Z-score定义为: $$ z = \frac{x - \mu}{\sigma} $$ 其中$\mu$是均值,$\sigma$是标准差。
适用场景:数据服从正态分布,需快速检测离群点。
代码示例

# 计算Z-score
z_scores = (df['column_name'] - df['column_name'].mean()) / df['column_name'].std()

# 识别异常值(|z| > 3)
outliers = df[abs(z_scores) > 3]


方法5:处理异常值(IQR法)

原理:基于四分位距(IQR)定义异常值,并替换或删除。
数学基础:计算四分位数Q1(25%)、Q3(75%),IQR = Q3 - Q1,异常值定义为: $$ x < Q1 - 1.5 \times \text{IQR} \quad \text{或} \quad x > Q3 + 1.5 \times \text{IQR} $$ 适用场景:数据分布偏斜,稳健性强。
代码示例

# 计算IQR和边界
Q1 = df['column_name'].quantile(0.25)
Q3 = df['column_name'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

# 替换异常值为边界值(或删除)
df_no_outliers = df.copy()
df_no_outliers['column_name'] = df['column_name'].apply(
    lambda x: lower_bound if x < lower_bound else (upper_bound if x > upper_bound else x)
)


总结与建议

  • 方法选择:根据数据特性和分析目标灵活组合。例如,缺失值处理优先填充或插值,异常值处理优先IQR法。
  • 最佳实践
    1. 先可视化数据(如箱线图)识别问题。
    2. 处理缺失值后,再处理异常值。
    3. 验证效果:计算缺失值比例或检查分布。
  • 注意事项:过度删除可能损失信息,填充可能引入偏差。建议在实战中使用df.info()df.describe()监控数据变化。通过Pandas,这些方法能高效提升数据质量,支持后续建模。

更多推荐