如何使用 sklearn.base.SimpleImputer 但 returns 和 pandas DataFrame 实现 sklearn 转换器

How to implement a sklearn transformer with sklearn.base.SimpleImputer but returns a pandas DataFrame

我想用 sklearn imputer 实现一个客户转换器,例如 sklearn.base.SimpleImputer。

输出应该是一个数据帧,

我有以下代码,但不确定这是否正确

class DFSimpleImputer(TransformerMixin):

def __init__(self, *args, **kwargs):
    self.imp = SimpleImputer(*args, **kwargs)

def fit(self, X, y=None, **fit_params):
    self.imp.fit(X)
    return self

def transform(self, X):
    # assumes X is a DataFrame
    Ximp = self.imp.transform(X)
    Xfilled = pd.DataFrame(Ximp, index=X.index, columns=X.columns)
    return Xfilled

我上面的代码实际上每次测试都有效,它适合数据集,然后进行转换。最终结果被转换成 DataFrame。但缺点是,如果我们最终得到一个稀疏矩阵,SimpleImputer 的默认 return nparray 会比 DataFrame 更好。因此,将 nparray 转换为 dataframe 有利于研究目的,但在生产中我可能会切换回 nparray

是的,上面的代码有效,returns 一个数据框。您需要问的问题是为什么在构建转换器时需要 DataFrame(是的,它添加了标签以便于阅读)。也许 nparray 更好,因为您可能会遇到稀疏矩阵,而 DataFrame 会占用您所有的 RAM。