Pandas通过列索引访问多列 用各列中位数填充对应NaN值
pandas指定列用中位数填充NaN的正确实现
原有代码的问题
你写的实现存在两个容易触发错误的点:
- 你提到的1、5、8、9是列的位置索引,直接使用
df[i]是按列名匹配取值,如果你的DataFrame列名不是0起始的连续整数,会直接触发KeyError,无法取到目标列。 - 对单列Series调用
transform('median')属于冗余操作,单列的median()方法会直接返回该列的中位数值,不需要通过transform做格式转换。
可直接使用的实现方案
方案1:和你原有思路一致的for循环写法
严格按位置索引取列,逻辑直观不容易出错:
# 指定待处理列的位置索引 target_col_pos = [1, 5, 8, 9] for pos in target_col_pos: # 按位置取整列数据 current_col = df.iloc[:, pos] # 用当前列的中位数填充空值后写回原列 df.iloc[:, pos] = current_col.fillna(current_col.median())
方案2:pandas原生批量处理写法(更简洁)
不需要写for循环,pandas会自动按列匹配对应中位数填充,代码更简洁,运行效率更高:
# 按位置索引取出对应的列名 target_cols = df.columns[[1, 5, 8, 9]] # 批量计算指定列的中位数,自动匹配填充空值 df[target_cols] = df[target_cols].fillna(df[target_cols].median())
提示:中位数计算仅对数值类型列有效,请提前确认待处理的4列均为数值格式,避免出现计算异常。
内容的提问来源于stack exchange,提问作者FrozenIceWinter
相关产品推荐
相关产品推荐

