技术咨询:为何触发ValueError: Input含NaN、infinity或超出float64范围错误
解决
ValueError: Input contains NaN, infinity or a value too large for dtype('float64') 问题 错误核心原因
你的输入数据df中存在不符合float64类型要求的异常数据:
- 缺失值(NaN)
- 无穷大/无穷小值(inf/-inf)
- 超出
float64数值范围的极端值
这些数据会导致模型预测时无法完成正常计算,从而触发该错误。
排查与修复步骤
1. 定位问题数据
在调用predict方法前,添加以下代码排查异常:
import numpy as np # 统计各列的NaN数量 print(df.isna().sum()) # 统计各列的无穷值数量 print(df.isin([np.inf, -np.inf]).sum()) # 查看数值列的范围分布(可针对具体列调整) print(df.describe())
2. 清理异常数据
- 处理缺失值:根据业务场景选择填充或删除
# 用列均值填充数值型NaN df = df.fillna(df.mean()) # 或直接删除含NaN的行 df = df.dropna() - 替换无穷值:先转成NaN再统一处理
df = df.replace([np.inf, -np.inf], np.nan) # 复用上面的缺失值处理逻辑 - 截断极端值:将超出合理范围的数值限制在区间内
# 以1%和99%分位数作为上下限 lower_bound = df.quantile(0.01) upper_bound = df.quantile(0.99) df = df.clip(lower_bound, upper_bound, axis=1)
3. 匹配模型输入格式
- 确认
df的列数、列顺序、数据类型与模型训练时的输入完全一致 - 排除输入数据中混入的非数值型列
内容的提问来源于stack exchange,提问作者Sviryu
相关产品推荐
相关产品推荐

