Python中缺失值处理策略与Imputer类实战

Noah
Noah
发布时间:2026-10-12 | 2人浏览过
原创

本文详解Python中处理缺失数据的多种策略,包括忽略、人工填写、全局常量及统计值填充,并重点介绍sklearn中Imputer类的具体应用。通过均值、中位数和众数填充示例,展示如何处理常规数据及稀疏矩阵中的缺失编码,帮助开发者高效完成数据预处理。

一、缺失值的处理方法

在现实世界的数据集中,由于各种原因常包含缺失数据,这些缺失值通常被编码为空格、NaN或其他占位符。然而,scikit-learn中的大多数学习算法无法直接兼容此类数据集,因为算法默认数组元素为数值,且每个元素都应有明确的代表意义。

处理不完整数据集的一种基本策略是删除包含缺失值的整行或整列,但这会导致大量有价值数据的浪费。以下是处理缺失值的几种常用方法:

1. 忽略元组

当缺失的是类别标签时(假设挖掘任务涉及分类),通常采用此方法。除非元组中存在多个属性缺失值,否则该方法效果不佳。当各属性缺失值的百分比变化较大时,其性能表现尤其差。

2. 人工填写缺失值

该方法通常耗时费力,当数据集规模大且缺失值众多时,往往难以实施。

3. 使用全局常量填充缺失值

将缺失的属性值替换为同一个常数(如“Unknown”或负无穷)。若所有缺失值均被替换为“unknown”,挖掘程序可能将其视为一个有趣的概念,因为它们具有相同的值。尽管该方法简单,但可靠性较低。

4. 使用与给定元组属同一类的所有样本的属性均值

例如:将顾客按credit_risk分类,则使用具有相同信用度的给定元组的顾客的平均收入替换income中的缺失值。

5. 使用最可能的值填充缺失值

可通过回归、基于贝叶斯形式化的推理工具或决策树归纳来确定。例如,利用数据集中其他顾客的属性,可以构造一棵决策树来预测income的缺失值。

注意:缺失值并不总是意味着数据的错误!!!!!!!

二、缺失值处理的代码实现

class:`Imputer`类提供了缺失数值处理的基本策略,例如使用缺失数值所在行或列的均值、中位数、众数来替代缺失值。该类也兼容不同的缺失值编码。

1、使用均值填充缺失值

import numpy as np

from sklearn.preprocessing import Imputer

imp = Imputer(missing_values='NaN', strategy='mean', axis=0)

import numpy as np

from sklearn.preprocessing import Imputer
 
###1.使用均值填充缺失值
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
imp.fit([[1, 2], [np.nan, 3], [7, 6]])


X = [[np.nan, 2], [6, np.nan], [7, 6]]
print(imp.transform(X)) 
[[4.     2.    ]
 [6.     3.66666667]
 [7.     6.    ]]

2、Imputer 类也支持稀疏矩阵:

import scipy.sparse as sp
 
X = sp.csc_matrix([[1, 2], [0, 3], [7, 6]])
 
imp = Imputer(missing_values=0, strategy='mean', axis=0)
 
imp.fit(X)
 
 
X_test = sp.csc_matrix([[0, 2], [6, 0], [7, 6]])
 
print(imp.transform(X_test))

#注意,在这里,缺失数据被编码为0, 这种方式用在当缺失数据比观察数据更多的情况时是非常合适的。 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表