问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

数据预处理中的缺失值补充策略:从删除到模型预测

创作时间:
作者:
@小白创作中心

数据预处理中的缺失值补充策略:从删除到模型预测

引用
CSDN
1.
https://blog.csdn.net/k316378085/article/details/146302255

在数据预处理阶段,处理缺失值是一个常见的挑战。不同的缺失值补充策略适用于不同的场景,选择合适的方法对于后续的数据分析和建模至关重要。本文将介绍四种常用的缺失值补充策略,并通过Python代码示例帮助读者更好地理解这些方法。

缺失值补充策略

策略
描述
适用场景
优点
缺点
删除含有缺失值的行或列
删除包含任何缺失值的行或列。
当缺失值比例较小且数据量较大时。
简单直接,不会引入新的误差。
可能导致数据丢失,特别是在缺失值较多的情况下。
用固定值填充
使用一个特定值(如0、均值、中位数等)来填充缺失值。
数据分布较为均匀,缺失值不是特别多时。
简单易行,适用于大多数情况。
如果选择的固定值不合适,可能会引入偏差。
用插值法填充
对于有序数据,使用插值法(如线性插值)来估计缺失值。
时间序列数据或其他有序数据。
能较好地保留数据的趋势和模式。
对于非有序数据效果不佳。
用模型预测填充
使用机器学习模型(如KNN、随机森林等)预测并填充缺失值。
复杂数据集,缺失值较多且有较强的相关性时。
能够更准确地填充缺失值,特别是当数据之间存在复杂关系时。
实现复杂,计算成本较高,需要更多的计算资源和时间。

示例代码与解释

删除含有缺失值的行或列

import pandas as pd
import numpy as np

# 创建一个示例数据集
data = {
    'A': [1, 2, np.nan, 4, 5],
    'B': [np.nan, 2, 3, 4, 5],
    'C': [1, np.nan, np.nan, 4, 5]
}
df = pd.DataFrame(data)

# 删除含有缺失值的行
df_dropped_rows = df.dropna()
print("删除含有缺失值的行后的数据:")
print(df_dropped_rows)

# 删除含有缺失值的列
df_dropped_columns = df.dropna(axis=1)
print("\n删除含有缺失值的列后的数据:")
print(df_dropped_columns)

用固定值填充

# 用均值填充缺失值
df_filled_mean = df.fillna(df.mean())
print("\n用均值填充缺失值后的数据:")
print(df_filled_mean)

# 用中位数填充缺失值
df_filled_median = df.fillna(df.median())
print("\n用中位数填充缺失值后的数据:")
print(df_filled_median)

# 用固定值(如0)填充缺失值
df_filled_zero = df.fillna(0)
print("\n用0填充缺失值后的数据:")
print(df_filled_zero)

用插值法填充

# 用线性插值法填充缺失值
df_interpolated = df.interpolate()
print("\n用线性插值法填充缺失值后的数据:")
print(df_interpolated)

用模型预测填充

from sklearn.impute import KNNImputer

# 使用KNN算法进行缺失值填充
imputer = KNNImputer(n_neighbors=2)
df_imputed = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
print("\n用KNN算法填充缺失值后的数据:")
print(df_imputed)

总结

通过上述表格和示例代码,您可以更好地理解不同的缺失值补充策略及其应用场景。每种方法都有其特定的优点和局限性,选择合适的方法取决于数据的具体特性和分析需求:

  • 删除含有缺失值的行或列:适用于缺失值较少的情况,简单但可能导致数据丢失。
  • 用固定值填充:适用于大多数情况,但需谨慎选择填充值以避免引入偏差。
  • 用插值法填充:适用于有序数据,能较好地保留趋势。
  • 用模型预测填充:适用于复杂数据集,但实现复杂且计算成本较高。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号