Ahm*_*ood 2 python dataframe pandas scikit-learn
我想要StandardScaler(通过 SK 学习)某些 DataFrame,其中包含很多NaN值,并且在执行此缩放器移位后我想将所有值分配NaN
为 -1。我们知道 StandardScaler 不适用于 NaN 值,这怎么可能?
如果有任何其他解决方案(不依赖于Scikit Learn)也请提及。
df = pd.DataFrame(StandardScaler().fit_transform(values_to_scale.values))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
Run Code Online (Sandbox Code Playgroud)
处理 NaN 值并不那么简单。它需要在采取任何进一步步骤处理 NaN 值之前对数据进行分析。有多种方法可以处理这些缺失值(以下不是详尽的列表):
将它们替换为另一个值:这是常用的方法之一,但是您将用于替换的值的选择将影响您的整体分析。您可以用平均值或占位符值(如 -1)替换它们,您知道该值在整个列中不会出现。
使用回归来替代值
您可以查看以下链接,以获得更好的想法
另外,您可以查看官方 sklearn 文档来估算缺失值。
更新:您可以在执行 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']])
Run Code Online (Sandbox Code Playgroud)
输出
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
Run Code Online (Sandbox Code Playgroud)
然后使用df.fillna填充 nan 值
df.fillna(-1)
Run Code Online (Sandbox Code Playgroud)
输出
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5233 次 |
最近记录: |