如何用第二个DataFrame的对应类别均值替换首个DataFrame中的NaN空值
现有代码问题分析
- 缩进错误:Python对代码缩进有严格要求,你编写的if判断语句、内层for循环都没有正确缩进,运行时会直接触发语法错误。
- 赋值逻辑错误:最后一行你使用了相等判断运算符
==,而非赋值运算符=,就算前面逻辑运行正常,也不会真的修改big_mart中的缺失值。 - 运行效率低下:两层for循环遍历的方式完全没有用到pandas的矢量化运算优势,数据量稍大时运行速度会非常慢。
正确实现方案
不需要写循环,用pandas内置的映射+填充接口就可以高效完成需求:
- 先将存储类别均值的DataFrame转为
Item_Type到对应均值的映射字典:
type_mean_map = item_type_mean.set_index('Item_Type')['mean'].to_dict()
- 对
Item_Weight列的缺失值做针对性填充:
big_mart['Item_Weight'] = big_mart['Item_Weight'].fillna(big_mart['Item_Type'].map(type_mean_map))
运行后即可看到你示例中Item_Type为Soft Drinks的行,Item_Weight的缺失值会被填充为8.7,符合预期。
内容的提问来源于stack exchange,提问作者user58653
相关产品推荐
相关产品推荐

