【问题标题】:How to fix this custom transformer in sklearn?如何在 sklearn 中修复这个自定义转换器?
【发布时间】:2019-05-23 07:59:45
【问题描述】:

我编写了这个简单的自定义转换器,它用 0 填充特定列中的 na。当我在我的数据集上 fit_transform 时,它不会在指定列中填充 nas。我没有在我的代码中看到问题。

class CustomImputer(BaseEstimator, TransformerMixin): 
    def fit(self, X, y=None):
        return self
    def transform(self, X, y=None):
        for col in ('PavedDrive', 'GarageQual', 'GarageFinish', 'FireplaceQu', 'KitchenQual', 'CentralAir', 'HeatingQC', 'BsmtExposure', 'BsmtCond', 'BsmtQual', 'ExterCond', 'ExterQual', 'Street'):
            X[col].fillna(0)
        return X

我希望返回的数据框是指定列已用 0 填充 nas 的数据框,但是,我得到了一个具有相同空值的数据框。

【问题讨论】:

  • 现在您明白正确缩进代码的重要性了。它只会导致混乱
  • 你是对的......

标签: python machine-learning scikit-learn sklearn-pandas


【解决方案1】:

您从未将fillna 操作分配给新变量。使用

X[col].fillna(0)

不会原地发生。而是使用:

X.loc[:,col] = X[col].fillna(0)

【讨论】:

    【解决方案2】:

    一个班轮解决方案是

    cols = ['PavedDrive', 'GarageQual', 'GarageFinish', 'FireplaceQu', 'KitchenQual', 'CentralAir', 'HeatingQC', 'BsmtExposure', 'BsmtCond', 'BsmtQual', 'ExterCond', 'ExterQual', 'Street']
    
    X.loc[:,cols] = X[cols].fillna(0)
    

    【讨论】:

      猜你喜欢
      • 2020-06-17
      • 2019-11-30
      • 1970-01-01
      • 2020-10-23
      • 2014-10-02
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      • 2018-08-16
      相关资源
      最近更新 更多