我正在研究Kaggle的泰坦尼克号机器问题 - 初学者。
我在python中编写代码,模型类型是K-NN。
我收到错误'输入包含NaN,无穷大或dtype值太大(' float64')'但是,我已经彻底检查了我的数据。没有无限值,没有NaN值,也没有大值。错误不会在我的训练集上抛出,而是在测试集上抛出 - 它们的值没有区别(内容明显不同,但值的类型相同)。 这是我的代码:
import numpy as np
import pandas as pd
test_dataset = pd.read_csv('test.csv')
X_classt = test_dataset.iloc[:, 1].values.reshape((1,-1))
X_faret = test_dataset.iloc[:,8].values.reshape((1,-1))
X_Stpt = test_dataset.iloc[:,3:7]
X_embarkedt = test_dataset.iloc[:,10].values.reshape((-1,1))
X_onet = np.concatenate((X_classt,X_faret))
X_onet = np.matrix.transpose(X_onet)
X_twot = np.concatenate((X_Stpt,X_embarkedt),axis=1)
Xt = np.concatenate((X_onet,X_twot),axis=1)
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = 'NaN',strategy ='mean', axis = 0)
imputer = imputer.fit(Xt[:,3:5])
Xt[:,3:5] = imputer.transform(Xt[:,3:5])
Xt_one = np.array(Xt[:,0:2],dtype = np.float)
ColThreet = Xt[:,2]
Xt_two = np.array(Xt[:,3:6],dtype=np.float)
ColSevent = Xt[:,6]
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
lett = LabelEncoder()
Xt[:,2] = lett.fit_transform(ColThreet)
lest = LabelEncoder()
Xt[:,6] = lest.fit_transform(Xt[:,6])
#This is where the error is thrown
ohct = OneHotEncoder(categorical_features=[6])
Xt = ohct.fit_transform(Xt).toarray()
感谢您提供的任何帮助。我意识到我的命名惯例很奇怪,但这是因为我使用了与训练代码基本相同的变量,因此我添加了一个' t'在每个变量的末尾,重复使用'测试集代码的名称。
提前致谢。
答案 0 :(得分:1)
仍然存在空值,因此出现错误消息。通过快速运行代码,我可以看到第二个功能中存在空值。
在Xt = np.concatenate((X_onet,X_twot),axis=1)
之后,我可以看到第二和第四个功能中存在空值
pd.DataFrame(Xt).isnull().sum()
虽然您只是通过功能3:5进行空值处理
在编码之前检查确认这一点。希望这有帮助。
只是一个关于主题的快速建议。您应该始终包含列标题,因为它将有助于获得有关数据和结果的一些直觉。
答案 1 :(得分:0)
您可以将df ['columnX']。fillna(0)添加到您的数据框,使用0作为默认值。