Я хочу, чтобы 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').
Это не совсем так просто иметь дело с значениями NaN. Это требует анализа данных, прежде чем предпринимать дальнейшие шаги для решения вопросов, связанных с NaN. Существуют различные способы устранения этих недостающих значений (следующий список не является исчерпывающим):
Замените их на другое значение: это один из наиболее часто используемых подходов, но выбор значения, который вы будете использовать для замены, повлияет на ваш общий анализ. Вы можете заменить их словами "mean" или сказать значение "placeholder" (например, -1), которое, как вы знаете, никогда не встречается во всем столбце.
Использование регрессии для замены значений
Вы можете взглянуть на следующие ссылки, чтобы получить более понятную идею
Кроме того, вы можете взглянуть на официальную документацию 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