Python scikit学习非NaN的插补值

Python scikit学习非NaN的插补值,python,numpy,scikit-learn,Python,Numpy,Scikit Learn,我试图为代表矩阵中空值的不同占位符插补值。例如,每当numpy数组中出现“?”时,我就要输入一个值 为此,我创建了一个插补器,如下所示: from sklearn import preprocessing imputer = preprocessing.Imputer(missing_values="?", strategy='mean', axis=0, copy=False) data = imputer.fit_transform(data) 但我得到了这个错误: /usr/loca

我试图为代表矩阵中空值的不同占位符插补值。例如,每当numpy数组中出现“?”时,我就要输入一个值

为此,我创建了一个
插补器
,如下所示:

from sklearn import preprocessing
imputer = preprocessing.Imputer(missing_values="?", strategy='mean', axis=0, copy=False)
data = imputer.fit_transform(data)  
但我得到了这个错误:

/usr/local/lib/python2.7/dist-packages/sklearn/preprocessing/imputation.pyc in _get_mask(X, value_to_mask)
     27 def _get_mask(X, value_to_mask):
     28     """Compute the boolean mask X == missing_values."""
---> 29     if value_to_mask == "NaN" or np.isnan(value_to_mask):
     30         return np.isnan(X)
     31     else:

NotImplementedError: Not implemented for this type
我是否误解了
缺失的\u值可以设置为什么


我的印象是它可以是任何字符串,而不仅仅是scikit学习源代码所建议的“NaN”。

类型
“整数或字符串”
实际上意味着“整数或字符串
'NaN'
”。
fit
/
fit\u transform
的输入仍应为数字。(将
“NaN”
作为字符串传递的唯一原因是传递
np.NaN
可能会导致混乱的情况,因为它不等于自身,即
np.NaN==np.NaN
的计算结果为
False

您使用的是哪个版本的sklearn?
不推荐使用0.20中的插补器,您可以使用-SimpleImputer代替它

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean', verbose=0)

imputer = imputer.fit(X[:, 1:3])           # assume you want to impute 2 columns
X[:, 1:3] = imputer.transform(X[:, 1:3])