我在尝试进行初学者机器学习项目Big Mart Sales。这个项目的数据集中包含多种类型的缺失值(NaN),以及需要更改的值(例如,lf -> Low Fat, reg -> Regular 等)。
我目前处理这些数据的方法是为每种需要修复的数据类型创建一个填补器:
from sklearn.impute import SimpleImputer as Imputer# 使值保持一致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值nan_imputer = Imputer(missing_values=np.nan, strategy='most_frequent')X[:, 7:8] = nan_imputer.fit_transform(X[:, 7:8])# 数值变量的NaN值nan_num_imputer = Imputer(missing_values=np.nan, strategy='mean')X[:, 0:1] = nan_num_imputer.fit_transform(X[:, 0:1])
然而,这种方法相当繁琐。是否有更简洁的方式来预处理这个数据集?
此外,令人沮丧的是,imputer.fit_transform()要求输入为二维数组,而我只想修复单列(一维)中的值。因此,我总是不得不使用我想修复的列加上旁边的列作为输入。有没有其他方法可以解决这个问题?谢谢。
回答:
有一个Python包可以以简单的方式为你完成这项工作,ctrl4ai
pip install ctrl4aifrom ctrl4ai import preprocessingpreprocessing.impute_nulls(dataset)
用法: [arg1]:[pandas dataframe],[method(default=central_tendency)]:[选择中心趋势或KNN]说明: 自动识别列中的分布类型并填补空值注意: 如果数据集很大,KNN会消耗更多的系统内存返回值: 数据框 [对于每个类别值有单独的列]