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

Pandas多列替换失效:保留全量DataFrame并实现均值插补

解决方案

问题原因分析

  • 第一个代码块:你将df直接赋值为目标列的子集,导致原DataFrame中未指定的列(如Pregnancies)被直接丢弃。
  • 第二个代码块:df[target_cols]在Pandas中可能返回原DataFrame的副本而非视图,此时使用inplace=True修改的是副本,原df完全不受影响。

正确实现代码

直接针对原DataFrame的目标列进行操作,既保留所有列,又完成0值替换与均值插补:

import numpy as np

# 定义需要处理的目标列
target_cols = ['Glucose','BloodPressure','SkinThickness','Insulin','BMI','Age']

# 1. 将目标列中的0替换为NaN,直接修改原df的对应列
df[target_cols] = df[target_cols].replace(0, np.NaN)

# 2. 用各目标列的均值填充NaN
df[target_cols] = df[target_cols].fillna(df[target_cols].mean())

另一种更灵活的实现(apply方法)

如果需要对每列做更复杂的逻辑处理,可以用apply:

target_cols = ['Glucose','BloodPressure','SkinThickness','Insulin','BMI','Age']

def process_col(col):
    # 替换0为NaN后用均值填充
    col = col.replace(0, np.NaN)
    return col.fillna(col.mean())

df[target_cols] = df[target_cols].apply(process_col)

关键注意事项

  • 避免盲目使用inplace=True:当不确定变量是视图还是副本时,直接赋值的方式更可靠,也更易读。
  • 验证目标列的0值有效性:确认Age等列的0确实是无效值(皮马数据集中Age无0值,此操作安全)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:20:28