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

如何用行中位数替换数据集NaN值?代码执行后未生效求助

行中位数替换DataFrame缺失值的正确实现

问题原因

你之前的代码失效的核心逻辑问题:

  • replace方法直接传入Series作为替换值时,会尝试将整个DataFrame的NaN统一替换为该Series的所有值,而非按行对应匹配替换。
  • fillna(medianinf)默认按列名匹配填充,但medianinf是基于行索引生成的Series,和DataFrame的列名不匹配,因此无法完成填充。

正确解决方案

以下三种方法均可实现按行中位数替换对应行的NaN值:

方法1:apply逐行处理(直观易读)

# 定位需要处理的列范围
target_cols = inflation_data.columns[4:-1]
# 逐行计算中位数并填充当前行的NaN
inflation_data[target_cols] = inflation_data[target_cols].apply(
    lambda row: row.fillna(row.median()), axis=1
)

方法2:mask结合广播对齐(性能更优)

import numpy as np

target_cols = inflation_data.columns[4:-1]
# 预先计算每行的中位数
medianinf = inflation_data[target_cols].median(axis=1)
# 将每行的NaN位置替换为对应行的中位数,通过[:, None]将Series转为二维数组实现广播
inflation_data[target_cols] = inflation_data[target_cols].mask(
    inflation_data[target_cols].isna(), medianinf[:, np.newaxis]
)

方法3:转置后按列填充(利用fillna默认逻辑)

target_cols = inflation_data.columns[4:-1]
medianinf = inflation_data[target_cols].median(axis=1)
# 转置后行变列,用fillna按列填充(对应原行的中位数),完成后再转置回来
inflation_data[target_cols] = inflation_data[target_cols].T.fillna(medianinf).T

内容的提问来源于stack exchange,提问作者Puj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:28:15