TypeError:float()参数不能为SimpleImputer Age字段缺失值填充报错求助
问题根因
- 参数书写错误:
fillna方法的inplace参数需要作为独立入参传递,你错误将其放入了value参数的字典中,参数传递逻辑错误。 - 列类型异常:报错提示
TypeError: float() argument must be a string or a number, not 'SimpleImputer',说明Age列已被错误赋值为SimpleImputer对象类型,而非原本的数值类型,导致计算中位数时无法完成类型转换。 - 代码不一致:你贴出的代码与实际运行代码不符,报错堆栈中第二行存在
.values()调用,而median()返回的是单个标量数值,没有values()方法,会额外触发属性错误。
修复方案
原生Pandas实现
import pandas as pd # 先修正Age列类型,强制转数值,无法转换的设为空值 all_data['Age'] = pd.to_numeric(all_data['Age'], errors='coerce') all_data = pd.concat([train_data, test_data]) average = all_data.Age.median() print('Average Age: {0}'.format(average)) # 修正fillna参数位置 train_data.fillna(value={'Age': average}, inplace=True) test_data.fillna(value={'Age': average}, inplace=True)
Scikit-learn SimpleImputer实现
from sklearn.impute import SimpleImputer # 初始化中位数填充器 imputer = SimpleImputer(strategy='median') # fit_transform接收二维数组,返回填充后的数值,直接赋值给Age列 train_data['Age'] = imputer.fit_transform(train_data[['Age']]) test_data['Age'] = imputer.transform(test_data[['Age']])
内容的提问来源于stack exchange,提问作者Affan AkramShk
相关产品推荐
相关产品推荐

