Входные данные содержат NaN, бесконечность или слишком большое значение для ошибки dtype ('float64'), но не содержат значений в наборе данных - PullRequest
0 голосов
/ 06 июня 2018

Я работаю над проблемой машины Titanic от 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» в конце каждой переменной, чтобы «повторно использовать» имена для кода набора тестов..

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Вы можете добавить df ['columnX']. Fillna (0) к вашему фрейму данных, чтобы использовать 0 в качестве значения по умолчанию.

0 голосов
/ 06 июня 2018

Есть все еще нулевые значения и, следовательно, сообщение об ошибке.Быстро запустив ваш код, я увидел нулевое значение во 2-й функции

Сразу после Xt = np.concatenate((X_onet,X_twot),axis=1) я мог видеть нулевые значения во 2-й и 4-й функции

pd.DataFrame(Xt).isnull().sum()

, в то время как вы просто передаете функцию 3: 5 для обработки нуля

Просто проверка перед кодированием подтверждает это.Надеюсь, это поможет.
Просто быстрое предложение вне темы. Вы всегда должны включать заголовки столбцов, так как это поможет получить некоторую интуицию о данных и результатах.

...