详解 Scikit-learn 的 impute.SimpleImputer函数:缺失值填充器

  • Post category:Python

sklearn.impute.SimpleImputer 是 Scikit-learn 库中用于数据填充的一个函数,用于对缺失的数据进行简单的填充处理。它的作用是根据输入方法来填充缺失值,常用的方法有:

  • 均值: 将缺失值填充为该列的均值。
  • 中位数: 将缺失值填充为该列的中位数。
  • 最常见值: 将缺失值填充为该列中出现最频繁的值。
  • 固定值: 将缺失值填充为固定的数值。

下面我们详细介绍 SimpleImputer 的使用方法,以及如何使用它来填充缺失值。

安装和导入

在开始使用 SimpleImputer 之前,我们需要先安装并导入 Scikit-learn。

!pip install scikit-learn

接着通过以下代码进行导入:

from sklearn.impute import SimpleImputer

构造一个 SimpleImputer 对象

构造一个 SimpleImputer 对象的方式如下:

# 创建一个 SimpleImputer 对象
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')

其中,missing_values 指定了需要替换的缺失值,我们使用了 np.nan 表示缺失值。strategy 指定了替换策略,这里我们使用的是均值。常用的 strategy 参数有 meanmedianmost_frequent

填充数据

接下来我们利用前面的 SimpleImputer 对象来处理我们的数据。以下是一个数据集的例子:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': [1, 2, np.nan, 4],
    'B': [5, np.nan, 7, 8],
    'C': [9, 10, 11, np.nan]
})

df 是一个包含了缺失数据的 DataFrame。我们可以使用 SimpleImputer 对象来填充它。

# 对数据进行填充
df_filled = imputer.fit_transform(df)

在这个例子中,我们使用了 fit_transform 方法来对数据进行填充。这个方法会返回一个新的 DataFrame。

实例

下面提供两个例子来说明 SimpleImputer 的使用。

实例 1

在这个例子中,我们使用 mean 策略来对数据进行填充。

import pandas as pd
from sklearn.impute import SimpleImputer

# 创建一个 SimpleImputer 对象,使用均值来填充缺失值
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')

# 创建一个测试数据集
df = pd.DataFrame({
    'A': [1, 2, np.nan, 4],
    'B': [5, np.nan, 7, 8],
    'C': [9, 10, 11, np.nan]
})

# 对数据进行填充
df_filled = imputer.fit_transform(df)

# 输出结果
print(df_filled)

输出结果如下:

array([[ 1.        ,  5.        ,  9.        ],
       [ 2.        ,  6.        , 10.        ],
       [ 2.33333333,  7.        , 11.        ],
       [ 4.        ,  8.        , 10.        ]])

在这个结果中,我们可以看到缺失值被成功地填充为了该列的均值。

实例 2

在这个例子中,我们使用 most_frequent 策略来对数据进行填充。

import pandas as pd
from sklearn.impute import SimpleImputer

# 创建一个 SimpleImputer 对象,使用最常见值来填充缺失值
imputer = SimpleImputer(missing_values=np.nan, strategy='most_frequent')

# 创建一个测试数据集
df = pd.DataFrame({
    'A': [1, 2, np.nan, 4],
    'B': [5, np.nan, 7, 8],
    'C': [1, 2, np.nan, 4]
})

# 对数据进行填充
df_filled = imputer.fit_transform(df)

# 输出结果
print(df_filled)

输出结果如下:

array([[1., 5., 1.],
       [2., 5., 2.],
       [1., 7., 1.],
       [4., 8., 4.]])

在这个结果中,我们可以看到缺失值被成功地填充为了该列中出现最频繁的值。