Pandas数据框缺失值填充异常及列数据类型修改方案问询
针对LotFrontage填充无效问题的解决方案
问题根因
你的问题核心是Int64类型的列无法存储浮点数值:当你用浮点型的均值(70.049958)填充Int64类型的LotFrontage时,因为类型不兼容,填充操作实际没有生效,缺失值仍然存在。
方案1:先转浮点型再填充(推荐,无精度损失)
直接将LotFrontage转为浮点类型,再填充均值,这样浮点数值可以正常存入,彻底解决填充无效的问题:
# 转换LotFrontage列类型为float64 num_data['LotFrontage'] = num_data['LotFrontage'].astype('float64') # 用列均值填充缺失值 num_data['LotFrontage'] = num_data['LotFrontage'].fillna(num_data['LotFrontage'].mean()) # 验证缺失值数量 num_data.isna().sum()
方案2:将均值取整后填充(适合允许整数的业务场景)
如果业务上LotFrontage只需要整数,可把计算出的均值四舍五入/取整后再填充,无需修改原列类型:
# 计算均值并四舍五入为整数(也可用int()直接取整) lot_frontage_mean = round(num_data['LotFrontage'].mean()) # 填充缺失值 num_data['LotFrontage'] = num_data['LotFrontage'].fillna(lot_frontage_mean)
注意:此方法会丢失小数精度,需确认业务逻辑是否允许。
方案3:一键完成类型转换与填充
使用pd.to_numeric工具,自动处理类型转换并填充,适合快速批量操作:
# 转换为数值类型(无法转换的强制为NaN),再填充均值 num_data['LotFrontage'] = pd.to_numeric(num_data['LotFrontage'], errors='coerce').fillna(num_data['LotFrontage'].mean())
执行后,LotFrontage会自动转为浮点类型,缺失值也会被正确填充。
额外检查项
- 查看
num_data.dtypes确认所有数值列的类型是否正确,避免拆分时把数值列误分到分类型切片。 - 确认均值计算是否正确:pandas的
mean()默认会跳过缺失值,若担心可手动指定skipna=True。
内容的提问来源于stack exchange,提问作者Jordan
相关产品推荐
相关产品推荐

