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

SimpleImputer处理含np.nan与np.inf数据报错,求解决方案

解决ValueError:同时填充np.nan和np.inf为0的方案

这个报错的核心原因很明确:SimpleImputer默认只会将np.nan识别为需要填充的缺失值,而你的数据里存在的np.inf(正无穷)或-np.inf(负无穷)不在它的处理范围内,导致拟合转换时触发了数值类型错误。

下面给你两种靠谱的解决办法,按需选择:

方法一:先转换inf为nan,再用SimpleImputer处理

如果你需要配合后续的scikit-learn流程,必须用SimpleImputer,可以先把所有无穷值转换成np.nan,再统一填充:

import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputer

# 第一步:把所有inf和-inf替换成nan
data_fe = data_fe.replace([np.inf, -np.inf], np.nan)

# 第二步:用SimpleImputer填充nan为0
imputer = SimpleImputer(missing_values=np.nan, strategy='constant', fill_value=0)
features_to_impute = data_fe.columns.tolist()
# 重置列名和索引,避免转换后数据结构混乱
data_fe[features_to_impute] = pd.DataFrame(
    imputer.fit_transform(data_fe[features_to_impute]),
    columns=features_to_impute,
    index=data_fe.index
)

方法二:用Pandas直接一步到位(更简洁高效)

如果你的流程不需要依赖sklearn的Imputer,用Pandas原生方法会更简单,能一次性处理np.nan、np.inf和-np.inf:

import numpy as np
import pandas as pd

# 方案A:先替换inf为nan,再统一填充0
data_fe = data_fe.replace([np.inf, -np.inf], np.nan).fillna(0)

# 方案B:直接用replace一次性替换所有目标值
data_fe = data_fe.replace([np.nan, np.inf, -np.inf], 0)

小提示

如果你使用的是scikit-learn 0.23及以上版本,也可以尝试直接指定missing_values参数为元组,让SimpleImputer同时识别nan和inf:

imputer = SimpleImputer(missing_values=(np.nan, np.inf, -np.inf), strategy='constant', fill_value=0)

不过这个方法在旧版本scikit-learn中可能不支持,所以先转换inf为nan或者用Pandas方法会更稳妥。

内容的提问来源于stack exchange,提问作者Maths12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 14:57:29