You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 07:39:20