我试图在泰坦尼克号数据集上工作,作为我的第一个Kaggle项目,我遇到了这个错误。我一直在Stack上寻找解决方案,但我仍然找不到。
我制作了两个pipeline来预处理数值和分类特征:
num_pipeline = Pipeline([
('imputer', SimpleImputer( strategy='median')),
('scaler', StandardScaler())])
cat_pipeline = Pipeline([
('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
('onehot', OneHotEncoder()) ])
,然后我把它们连接到一个ColumnTransformer
preprocessor = ColumnTransformer(
transformers = [
('num', num_pipeline, numeric_features),
('cat', cat_pipeline, categorical_features) ])
numeric_features和categorical_features是数值和分类特征的列表:
numeric_features = ['Age', 'SibSp', 'Parch', 'Fare']
categorical_features = ['Pclass', 'Sex', 'Embarked']
最后,在我最后的管道中,我添加了一个分类器:
knn = Pipeline([
('Preprocessor' , preprocessor),
('Classifier', KNeighborsClassifier())
])
knn.fit(X_train, y_train)
这是当我得到"ValueError: Input contains NaN">
train = pd.read_csv('train.csv')
train.isna().sum()
输出:PassengerId 0
Survived 0
Pclass 0
Name 0
Sex 0
Age 177
SibSp 0
Parch 0
Ticket 0
Fare 0
Cabin 687
Embarked 2
dtype: int64
Age
、Cabin
、Embarked
列中包含NaN值。但是,在numeric_features
或categorical_features
中不包括Cabin
列,因此它的值不会被输入。这就是你得到错误的原因。