Python 在执行StandardScaler后将NaN分配给-1
我想StandardScaler(通过SK学习)某些数据帧,其中包含大量NaN值,在执行此scaler移位后,我想将所有Python 在执行StandardScaler后将NaN分配给-1,python,pandas,dataframe,scikit-learn,Python,Pandas,Dataframe,Scikit Learn,我想StandardScaler(通过SK学习)某些数据帧,其中包含大量NaN值,在执行此scaler移位后,我想将所有NaN分配给-1。我们知道StandardScaler不能处理NaN值,这是怎么可能的 如果有任何其他解决方案(不依赖于Scikit学习),也请提及 df = pd.DataFrame(StandardScaler().fit_transform(values_to_scale.values)) 我收到以下错误消息: ValueError: Input contains Na
NaN
分配给-1。我们知道StandardScaler不能处理NaN值,这是怎么可能的
如果有任何其他解决方案(不依赖于Scikit学习),也请提及
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值之前,需要对数据进行分析。有多种方法可以处理这些缺失值(以下不是详尽的列表):
- 忽略缺少的值altogther:这种方法的问题是缺少的行可能包含其他列中的重要信息,忽略它们将导致分析不完整
- 用另一个值替换它们:这是常用的方法之一,但选择要替换的值将影响整体分析。您可以将它们替换为say mean,或者说占位符值(如-1),您知道该值在整个列中从未出现过
- 使用回归替换值
- **使用KNN替换值**
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
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
然后使用
outout
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
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
您已经分享了一些关于如何处理丢失数据的指南,但就我而言,我知道我想做什么。我只想在执行StandardScaler之后(而不是之前)将它们分配到-1(正如我在问题中提到的)。我的问题很简单,我怎么做?最后一个问题。这能以某种方式应用于多维数据帧吗?e、 g如果我们也有一个col2?这可以应用,但是为空值和标准标量切片数据的方式是不同的。如果可能的话,你能举个例子吗?