使用sklearn imputer时的折旧警告

时间:2016-09-15 04:37:08

标签: python pandas scikit-learn

我的代码非常简单,但它总是弹出这样的警告:

DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will
raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if
your data has a single feature or X.reshape(1, -1) if it contains a single sample.
(DeprecationWarning)

即使我在s.reshape(-1,1)的括号中添加fit_transforms,我也不知道为什么它不起作用。

代码如下:

import pandas as pd

s = pd.Series([1,2,3,np.nan,5,np.nan,7,8])
imp = Imputer(missing_values='NAN', strategy='mean', axis=0)
x = pd.Series(imp.fit_transform(s).tolist()[0])
x

1 个答案:

答案 0 :(得分:0)

除了警告之外,我的代码片段由于缺少import而没有被我解释,并且一旦我进行了一些导入,就会出现错误(ufunc: isnan not supported)。

此代码在没有警告或错误的情况下运行:

In [39]: import pandas as pd

In [40]: import numpy as np

In [41]: from sklearn import preprocessing

In [42]: s = pd.Series([1,2,3,np.nan,5,np.nan,7,8])

In [43]: imp = preprocessing.Imputer(strategy='mean', axis=0)

In [44]: x = pd.Series(imp.fit_transform(s.values.reshape(1, -1)).tolist()[0])

In [45]: x
Out[45]: 
0    1.0
1    2.0
2    3.0
3    5.0
4    7.0
5    8.0
dtype: float64

请注意以下事项:

  1. importŠ

  2. preprocessing.Imputer(strategy='mean', axis=0)省略了您的NAN规范(应该是NaN,但由于NaN是默认设置,您可以将其删除)。

  3. x = pd.Series(imp.fit_transform(s.values.reshape(1, -1)).tolist()[0])从1d数组转换为2d数组。

  4. 你的警告是关于第3点的 - 这个函数想要一个2d矩阵,而不是1d向量。