我正在尝试进行初学者机器学习项目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)中。因此,我始终必须将要修复的列以及其旁边的列用作输入。还有其他解决方法吗?谢谢。
但是,这种方法非常麻烦。有没有更整洁的方法来预处理此数据集?
如果有数字列,则可以使用一些方法来填充丢失的数据:
让我们看看如何计算一栏的平均值,例如:一种方法是使用熊猫的fillna:
X['Name'].fillna(X['Name'].mean(), inplace=True)
有关分类数据,请在此处查看:Impute categorical missing values in scikit-learn