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

Posted

技术标签:

【中文标题】如何预处理具有多种类型缺失数据的数据集【英文标题】:How to preprocess a dataset with many types of missing data 【发布时间】:2020-02-07 11:26:24 【问题描述】:

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

我目前预处理这些数据的方法是为需要修复的每种类型的数据创建一个 imputer:

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) 中。因此,我总是必须使用要修复的列以及旁边的列作为输入。有没有其他方法可以解决这个问题?谢谢。

以下是我的一些数据行:

【问题讨论】:

你能把你的数据框的几行放到这篇文章中吗?你只有数字数据吗? 是的,我已经编辑了帖子并添加了我的数据截图。 【参考方案1】:

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

如果你有一个数值列,你可以使用一些方法来填充缺失的数据:

在域内具有意义的常量值,例如 0,与所有其他值不同。 另一个随机选择的记录中的值。 列的平均值、中位数或众数。 另一个预测模型估计的值。

让我们看看它对于一列的平均值是如何工作的,例如: 一种方法是使用 pandas 中的fillna:

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

分类数据请看这里:Impute categorical missing values in scikit-learn

【讨论】:

我尝试了你的建议并得到了错误:AttributeError: 'numpy.ndarray' object has no attribute 'fillna' 我教它是一个数据框,不适用于X['Item_Weight']【参考方案2】:

有一个python包可以用简单的方式为你做这件事,ctrl4ai

pip install ctrl4ai

from ctrl4ai import preprocessing

preprocessing.impute_nulls(dataset)

Usage: [arg1]:[pandas dataframe],[method(default=central_tendency)]:[Choose either central_tendency or KNN]
Description: Auto identifies the type of distribution in the column and imputes null values
Note: KNN consumes more system mermory if the size of the dataset is huge
Returns: Dataframe [with separate column for each categorical values]

【讨论】:

干得好!它会减少 loc!

以上是关于如何预处理具有多种类型缺失数据的数据集的主要内容,如果未能解决你的问题,请参考以下文章

处理 Pandas read_csv 中的缺失数据

Python-sklearn数据预处理(单/多个数据集数据标准化稳健标准化缺失值填补)

我应该使用训练数据集的函数来处理训练数据集和测试数据集的缺失值吗

机器学习100天:003 数据预处理之处理缺失值

机器学习100天:003 数据预处理之处理缺失值

Python 数据竞赛常用 | 可视化数据集缺失情况