使用imblearn欠采样时遇输入值错误(含NaN)如何解决?
问题解决方案
1. 修复缺失值处理的核心问题
你的fillna调用根本没生效——inplace=False(默认参数)会返回一个处理完缺失值的新DataFrame,但你没把这个新对象赋值给dataframe1,导致原数据里的NaN完全没被处理。修改代码如下:
# 处理Nan值,必须接收返回的新DataFrame dataframe1 = dataframe1.fillna(dataframe1.mean())
额外注意:如果数据集中存在非数值类型的列,dataframe1.mean()会自动跳过这些列,导致这些列的NaN残留。可以先执行以下代码排查:
# 打印各列的NaN数量,确认是否还有遗漏 print(dataframe1.isna().sum())
2. 关于"数值过大"的误解
你提到的最大数值5747.13完全在float64的容纳范围内(float64支持的数值范围远大于这个量级),所以错误提示里的"数值过大"不是真实问题,根源还是NaN没处理干净。
3. 代码优化建议
- 分离特征和标签的代码可以简化:
X = dataframe1.drop('label', axis=1) y = dataframe1['label'].values
- 可以在处理后加断言,提前验证数据状态:
# 确保X中没有NaN,避免后续报错 assert not X.isnull().any().any(), "特征矩阵X中仍存在未处理的NaN值"
内容的提问来源于stack exchange,提问作者Ghada
相关产品推荐
相关产品推荐

