我想 StandardScaler (通过SK学习)某些DataFrame,其中包含大量 NaN 值,并且在执行此缩放器转换后,我想分配所有{{1到-1。我们知道StandardScaler无法使用NaN值,这怎么可能?
如果还有其他解决方案(不依赖于 Scikit Learn ),请提及。
NaN
我收到以下错误消息:
df = pd.DataFrame(StandardScaler().fit_transform(values_to_scale.values))
答案 0 :(得分:2)
处理NaN值并不是那么简单。它需要在采取任何进一步措施来处理NaN值之前对数据进行分析。有多种方法可以处理这些缺失值(以下不是详尽的列表):
将其替换为其他值:这是常用方法之一,但选择要用于替换的值会影响整体分析。你可以用say mean替换它们,或者说你知道在整个列中都不会出现的占位符值(如-1)。
使用回归代替值
您可以查看以下链接,以获得更好的主意
另外,您可以查看official sklearn documentation for imputing missing values。
更新:您可以像这样执行StandardScalar时忽略NaN值
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
然后使用df.fillna
填充nan值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