如何预处理具有多种类型的缺失数据的数据集

问题描述 投票:0回答:1

我正在尝试进行初学者机器学习项目Big Mart Sales。该项目的数据集包含许多类型的缺失值(NaN)和需要更改的值(lf-> Low Fat,reg-> Regular等)

我目前用于预处理此数据的方法是为需要修复的每种类型的数据创建一个推动者:

from sklearn.impute import SimpleImputer as Imputer

# make the values consistent
lf_imputer = Imputer(missing_values='LF', strategy='constant', fill_value='Low Fat')
lowfat_imputer = Imputer(missing_values='low fat', strategy='constant', fill_value='Low Fat')
X[:,1:2] = lf_imputer.fit_transform(X[:,1:2])
X[:,1:2] = lowfat_imputer.fit_transform(X[:,1:2])

# nan for a categorical variable
nan_imputer = Imputer(missing_values=np.nan, strategy='most_frequent')
X[:, 7:8] = nan_imputer.fit_transform(X[:, 7:8])

# nan for a numerical variable
nan_num_imputer = Imputer(missing_values=np.nan, strategy='mean')
X[:, 0:1] = nan_num_imputer.fit_transform(X[:, 0:1])

但是,这种方法非常麻烦。有没有更整洁的方法来预处理此数据集?

另外,imputer.fit_transform()需要2D数组作为输入令人沮丧,而我只想将值固定在单列(1D)中。因此,我始终必须将要修复的列以及其旁边的列用作输入。还有其他解决方法吗?谢谢。

python-3.x machine-learning scikit-learn spyder imputation
1个回答
0
投票

但是,这种方法非常麻烦。有没有更整洁的方法来预处理此数据集?

如果有数字列,则可以使用一些方法来填充丢失的数据:

  • 在域中具有含义的常数值,例如0,与所有其他值都不同。
  • 来自另一个随机选择的记录的值。
  • 该列的平均值,中位数或众数值。
  • 由另一个预测模型估算的值。

让我们看看如何计算一栏的平均值,例如:一种方法是使用熊猫的fillna

X['Name'].fillna(X['Name'].mean(), inplace=True) 

有关分类数据,请在此处查看:Impute categorical missing values in scikit-learn

© www.soinside.com 2019 - 2024. All rights reserved.