You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

报错ValueError: Input y contains NaN的原因排查与代码修改咨询

问题:训练机器学习管道时出现ValueError: Input y contains NaN错误

代码片段

# Fit each pipeline on the training data
for pipeline in pipelines:
    pipeline.fit(x_train, y_train)

报错堆栈

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-129-39301fb0712f> in <cell line: 19>()
     18 # Fit each pipeline on the training data
     19 for pipeline in pipelines:
---&gt; 20     pipeline.fit(x_train, y_train)

5 frames
/usr/local/lib/python3.10/dist-packages/sklearn/utils/validation.py in _assert_all_finite(X, allow_nan, msg_dtype, estimator_name, input_name)
    159                 "#estimators-that-handle-nan-values"
    160             )
--&gt; 161         raise ValueError(msg_err)
    162 
    163 

ValueError: Input y contains NaN.
原因分析

报错直接明确问题:目标变量y_train中存在缺失值(NaN),而scikit-learn的绝大多数模型默认不允许目标变量包含缺失值,调用fit()方法时会触发验证检查,从而抛出该错误。

解决方法

1. 先确认缺失情况

运行以下代码,明确y_train中NaN的数量和位置:

# 统计NaN的总数量
print(y_train.isna().sum())

# 查看NaN所在的行索引(适用于Series/DataFrame类型的y_train)
print(y_train[y_train.isna()].index)

2. 根据场景选择处理方式

方式一:删除含缺失值的样本

如果NaN的数量极少,直接删除对应样本最简便,注意要同步过滤x_train中的对应行:

# 生成非缺失值的掩码
mask = y_train.notna()
# 过滤得到干净的训练数据集
x_train_clean = x_train[mask]
y_train_clean = y_train[mask]

# 使用清理后的数据训练管道
for pipeline in pipelines:
    pipeline.fit(x_train_clean, y_train_clean)

方式二:填充缺失值

如果缺失样本量较大,无法直接删除,可根据y_train的类型选择填充方式:

  • 若y_train是数值型变量:用均值、中位数或众数填充(中位数更抗极端值影响):
    y_train_clean = y_train.fillna(y_train.median())
    
  • 若y_train是分类变量:用出现次数最多的类别(众数)填充:
    y_train_clean = y_train.fillna(y_train.mode()[0])
    

填充完成后,用y_train_clean替换原y_train执行训练即可。

方式三:更换支持目标变量含NaN的模型

如果业务允许,可替换为XGBoost、LightGBM这类原生支持目标变量包含缺失值的模型,无需预处理NaN即可直接训练。

内容的提问来源于stack exchange,提问作者Pushpavathi Kothapalli AP2213

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 03:43:20