Как нормализовать только ненулевые значения в определенных колонках в StandardScaler?

Как нормализовать только ненулевые значения в определенных колонках?

Мой код:

# set params for normalization
COLUMNS_TO_NORMALIZE = ['a', 'b', 'c']

from sklearn.preprocessing import StandardScaler

sc = StandardScaler()

# get index of null values
null_values = X_train[COLUMNS_TO_NORMALIZE].isnull()

# perform standard scalar on only non-NaN values
X_train[COLUMNS_TO_NORMALIZE][~null_values] = sc.fit_transform(X_train[COLUMNS_TO_NORMALIZE][~null_values])

Не меняет значения, а возвращает те же, что и были.


Ответы (1 шт):

Автор решения: MaxU

попробуйте так:

mask = X_train[COLUMNS_TO_NORMALIZE].isna().any(axis=1)
vals = X_train.loc[~mask, COLUMNS_TO_NORMALIZE]

X_train.loc[~mask, COLUMNS_TO_NORMALIZE] = \
    pd.DataFrame(sc.fit_transform(vals), 
                 index=vals.index, 
                 columns=COLUMNS_TO_NORMALIZE)
→ Ссылка