simpleimputer не работает с моими данными

#scikit-learn #sklearn-pandas #imputation #data-wrangling

#scikit-learn #sklearn-pandas #вменение #перебор данных

Вопрос:

ВСЕ,

в моих данных есть np.nan и np.infs. я хотел бы заменить их на 0, однако, когда я делаю следующее, я получаю следующую ошибку:

 imputer = SimpleImputer(missing_values=np.nan, strategy='constant', fill_value=0)
features_to_impute = data_fe.columns.tolist()

data_fe[features_to_impute] = pd.DataFrame(imputer.fit_transform(data_fe[features_to_impute]), 
                                           columns=features_to_impute)


ValueError: Input contains infinity or a value too large for dtype('float64').
  

не уверен, как с этим справиться, кто-нибудь знает, как я могу обойти это, а также приписать информацию?

Ответ №1:

Если вы хотите заменить оба np.nan и np.inf на 0 , просто используйте np.nan_to_num

Пример:

 a = np.array([[1, 2, np.nan, 5],
              [-np.inf, 9,3,np.nan],
              [8, np.inf, np.nan,9]])

Out[441]:
array([[  1.,   2.,  nan,   5.],
       [-inf,   9.,   3.,  nan],
       [  8.,  inf,  nan,   9.]])

b = np.nan_to_num(a, nan=0, posinf=0, neginf=0)

Out[444]:
array([[1., 2., 0., 5.],
       [0., 9., 3., 0.],
       [8., 0., 0., 9.]])
  

Итак, в вашем случае просто передайте выбранные столбцы фрейма данных в np.nan_to_num

 np.nan_to_num(data_fe[features_to_impute], nan=0, posinf=0, neginf=0)