Назначение NaN -1 после выполнения StandardScaler

1

Я хочу, чтобы StandardScaler (через SK узнал) определенный DataFrame, который содержит много значений NaN, и после выполнения этого сдвига масштабирования я хочу назначить все NaN -1. Как это возможно, поскольку мы знаем, что StandardScaler не работает с значениями NaN?

Если есть какое-либо другое решение (которое не зависит от Scikit Learn), пожалуйста, укажите это.

df = pd.DataFrame(StandardScaler().fit_transform(values_to_scale.values))

Появляется следующее сообщение об ошибке:

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
Теги:
pandas
dataframe
scikit-learn

1 ответ

2
Лучший ответ

Это не совсем так просто иметь дело с значениями NaN. Это требует анализа данных, прежде чем предпринимать дальнейшие шаги для решения вопросов, связанных с NaN. Существуют различные способы устранения этих недостающих значений (следующий список не является исчерпывающим):

  • Игнорировать недостающие значения altogther: проблема с этим подходом заключается в том, что недостающие строки могут содержать важную информацию в других столбцах, и игнорирование их приведет к неполному анализу
  • Замените их на другое значение: это один из наиболее часто используемых подходов, но выбор значения, который вы будете использовать для замены, повлияет на ваш общий анализ. Вы можете заменить их словами "mean" или сказать значение "placeholder" (например, -1), которое, как вы знаете, никогда не встречается во всем столбце.

  • Использование регрессии для замены значений

  • ** Использование KNN для подстановки значений **

Вы можете взглянуть на следующие ссылки, чтобы получить более понятную идею

Кроме того, вы можете взглянуть на официальную документацию sklearn, чтобы вменять отсутствующие значения.

Обновление: вы можете игнорировать значения NaN при выполнении StandardScalar следующим образом:

import numpy as np    
import pandas as pd
from sklearn.preprocessing import StandardScaler

#Create a dataframe
df = pd.DataFrame({'col1': [0, np.nan, 2, 3, np.nan, 4, 5, np.nan, 6, 7, np.nan]})

#Get the index of null values
null_values = d['col1'].isnull()

#Perform standard scalar on only non-NaN values
df.loc[~null_values, ['col1']] = StandardScaler().fit_transform(df.loc[~null_values, ['col1']])

Выход

    col1
0   -1.728498
1   NaN
2   -0.832240
3   -0.384111
4   NaN
5   0.064018
6   0.512148
7   NaN
8   0.960277
9   1.408406
10  NaN

Затем заполните значения nan с помощью df.fillna

df.fillna(-1)

Outout

    col1
0   -1.728498
1   -1.000000
2   -0.832240
3   -0.384111
4   -1.000000
5   0.064018
6   0.512148
7   -1.000000
8   0.960277
9   1.408406
10  -1.000000
  • 0
    Вы поделились некоторыми руководствами о том, как обрабатывать недостающие данные, но в моем случае я знаю, что я хочу сделать. Я просто хочу присвоить им -1 (как я уже упоминал в своем вопросе) после (не раньше) выполнения StandardScaler. Мой вопрос был прост, что, как я могу это сделать?
  • 0
    Извините за это, я обновил свой ответ на основе вашего комментария
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню