ValueError:输入包含NaN,即使使用SimpleImputer



我试图在泰坦尼克号数据集上工作,作为我的第一个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

AgeCabinEmbarked列中包含NaN值。但是,在numeric_featurescategorical_features中不包括Cabin列,因此它的值不会被输入。这就是你得到错误的原因。

最新更新