Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在执行StandardScaler后将NaN分配给-1_Python_Pandas_Dataframe_Scikit Learn - Fatal编程技术网

Python 在执行StandardScaler后将NaN分配给-1

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

我想StandardScaler(通过SK学习)某些数据帧,其中包含大量NaN值,在执行此scaler移位后,我想将所有
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替换值**
您可以查看以下链接,以获得更好的想法

此外,您还可以查看

更新:您可以在这样执行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
    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?这可以应用,但是为空值和标准标量切片数据的方式是不同的。如果可能的话,你能举个例子吗?