ValueError: Input contains NaN, even when Using SimpleImputer

ValueError: Input contains NaN, even when Using SimpleImputer

我正在尝试将 Titanic 数据集作为我的第一个 Kaggle 项目,但我 运行 遇到了这个错误。我一直在 Stack 上寻找解决方案,但我仍然无法弄清楚。

我制作了两个管道来预处理数值和分类特征:

num_pipeline = Pipeline([
            ('imputer', SimpleImputer( strategy='median')), 
            ('scaler', StandardScaler())])
    
cat_pipeline = Pipeline([
        ('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
        ('onehot', OneHotEncoder()) ])

然后我将它们加入了 ColumnT运行sformer

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:输入包含 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

AgeCabinEmbarked 包含 NaN 值。但是,您没有在 numeric_featurescategorical_features 中包含 Cabin 列,因此不会估算它的值。这就是您收到错误的原因。