Как мне объединить различные виды missing_values ​​в SimpleImputer sklearn в один - PullRequest
1 голос
/ 03 октября 2019

У меня есть данные с двумя различными типами пропущенных значений (np.nan и None), и я пытаюсь вменять их с помощью SimpleImputer. Хотя я могу сделать это в два этапа, мне было интересно, есть ли способ объединить это в один. Мой код ниже:

import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer

train = pd.DataFrame({
        'users':[None,'John Johnson',np.nan,'John Smith','Mary Williams','ted bundy'],
})
test = pd.DataFrame({
        'users':[None,np.nan,'John Smith','Mary Williams','Andy Rollins'],
})

si1 = SimpleImputer(strategy='constant',fill_value='NAN')
si2 = SimpleImputer(strategy='constant',missing_values = None, fill_value='MISSING')
train_imputed_interim1 = si1.fit_transform(train)
train_imputed = si2.fit_transform(train_imputed_interim1)
test_imputed_interim1 = si1.fit_transform(test)
test_imputed = si2.fit_transform(test_imputed_interim1)
print('\ntrain_imputed:')
print(train_imputed)
print('\ntest_imputed:')
print(test_imputed)

Есть ли способ объединить si1 и si2 в одно. Я пытался

si = SimpleImputer(strategy='constant',missing_values = [None,np.nan], fill_value='MISSING')

, но это не похоже на работу.

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Нет способа сделать это строго говоря с одним SingleImputer.

Один вариант, как упомянуто в предыдущем ответе, состоит в том, чтобы использовать панд 'replace, но если вы хотите придерживатьсяинструментарий scikit-learn, вы могли бы вместо этого использовать Pipeline, что, возможно, немного более элегантно, чем двухшаговое решение, которое у вас уже есть:

from sklearn.pipeline import Pipeline

pipe = Pipeline([('si1',SimpleImputer(strategy='constant',fill_value='NAN')),
                ('si2', SimpleImputer(strategy='constant',missing_values = None, fill_value='MISSING'))])
print('\ntrain_imputed:')
print(pipe.fit_transform(train))
print('\ntest_imputed:')
print(pipe.transform(test))

Это даст вам те же результаты.

0 голосов
/ 03 октября 2019

Если вы хотите заменить значения None и np.nan на «MISSING», вы можете использовать pd.DataFrame.replace ().

test.replace(np.nan, "MISSING") 

           users
0        MISSING
1        MISSING
2     John Smith
3  Mary Williams
4   Andy Rollins
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...