我在数据预处理阶段尝试解决缺失数据问题,并且一直严格按照Udemy教程进行操作。
这是我的数据集”Data.csv”
Country Age Salary PurchasedFrance 44 72000 NoSpain 27 48000 YesGermany 30 54000 NoSpain 38 61000 NoGermany 40 YesFrance 35 58000 YesSpain 52000 NoFrance 48 79000 YesGermany 50 83000 NoFrance 37 67000 Yes
这是完整的代码。
# 数据预处理 # 导入库 import numpy as np import matplotlib.pyplot as plt import pandas as pd dataset = pd.read_csv('Data.csv') X = dataset.iloc[:, :-1].values Y = dataset.iloc[:, -1].values # 处理缺失数据 from sklearn.preprocessing import Imputer imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0) # 下面这行代码会引发错误 imputer = Imputer.fit(X[:, 1:3]) X[:, 1:3] = imputer.transform(X[:, 1:3])
上述代码在教程视频中运行得很好,但是当我运行上述代码时,我得到了以下错误:
**imputer = Imputer.fit(X[:, 1:3])Traceback (most recent call last): File "<ipython-input-3-dddb27392326>", line 1, in <module> imputer = Imputer.fit(X[:, 1:3])TypeError: fit() missing 1 required positional argument: 'X'**
我使用的规格如下:
操作系统:Win 8.1,教程使用的是MACIDE:Spyder 3.2.8Python 3.6
有人可以帮助我调试这个错误吗?
回答:
我使用的是sklearn版本0.19.1
。所以你的代码中有一个错误,你调用了类方法Imputer.fit
,而不是实例方法imputer.fit
,因为imputer
是Imputer
的实例。另外,你可以使用Imputer
的fit_transform方法来一次性拟合和转换数据,像这样
import numpy as npimport matplotlib.pyplot as pltfrom sklearn.preprocessing import Imputerimport pandas as pddataset = pd.read_csv('Data.csv')X = dataset.iloc[:, :-1].valuesY = dataset.iloc[:, -1].values# 处理缺失数据imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)X[:, 1:3] = imputer.fit_transform(X[:, 1:3])
这会将数组X
更改为
array([['France', 44.0, 72000.0], ['Spain', 27.0, 48000.0], ['Germany', 30.0, 54000.0], ['Spain', 38.0, 61000.0], ['Germany', 40.0, 63777.77777777778], ['France', 35.0, 58000.0], ['Spain', 38.77777777777778, 52000.0], ['France', 48.0, 79000.0], ['Germany', 50.0, 83000.0], ['France', 37.0, 67000.0]], dtype=object)
作为旁注,避免将类实例命名为与类本身相同的名称。我在回答中没有更改名称,以指出代码中的错误。