Как исправить этот пользовательский преобразователь в sklearn?

Я написал этот простой пользовательский преобразователь, который заполняет na в определенных столбцах 0. Когда я использую fit_transform в своем наборе данных, он не заполняет na в указанных столбцах. Мне не удалось увидеть проблему в моем коде.

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

Я ожидал, что возвращенный фрейм данных будет таким, в котором указанные столбцы заполнили nas 0, однако я получаю фрейм данных с теми же нулевыми значениями.


person Youi Rabi    schedule 24.12.2018    source источник
comment
Теперь вы видите, насколько важно правильно отступать в коде. Это просто приводит к путанице   -  person Sheldore    schedule 24.12.2018
comment
Ты прав...   -  person Youi Rabi    schedule 24.12.2018


Ответы (2)


Вы никогда не присваивали операцию fillna новой переменной. С использованием

X[col].fillna(0)

не происходит на месте. Вместо этого используйте:

X.loc[:,col] = X[col].fillna(0)
person James    schedule 24.12.2018

Одно линейное решение будет

cols = ['PavedDrive', 'GarageQual', 'GarageFinish', 'FireplaceQu', 'KitchenQual', 'CentralAir', 'HeatingQC', 'BsmtExposure', 'BsmtCond', 'BsmtQual', 'ExterCond', 'ExterQual', 'Street']

X.loc[:,cols] = X[cols].fillna(0)
person Venkatachalam    schedule 24.12.2018