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

如何按条件填充DataFrame缺失值:非全空列用均值,全空列填0?

解决方案

你的代码问题在于没有对每一列单独做判断,当前逻辑是把cols对应的整个DataFrame的缺失值总数和行数比较,只有当所有选中列都全为空时才会用0填充,否则所有列都用均值填充,这和你的需求不符。

下面提供两种更优的实现方式:

方式一:逐列自定义处理(直观易读)

用apply对每一列单独应用填充逻辑,适合小数据集或需要清晰逻辑的场景:

def fill_missing(col):
    # 判断当前列是否全为空
    if col.isna().sum() == len(col):
        return col.fillna(0.0)
    else:
        return col.fillna(col.mean())

# 对选中的列应用填充函数
train_x[cols] = train_x[cols].apply(fill_missing, axis=0)

方式二:向量化操作(高效快捷)

利用pandas的向量化特性,先计算各列均值,再把全空列的均值替换为0,最后统一填充,大数据集下效率更高:

# 计算各列均值(全空列的mean会返回NaN)
col_fill_values = train_x[cols].mean()
# 把全空列的填充值替换为0(notna().any()判断列是否存在非空值)
col_fill_values = col_fill_values.where(train_x[cols].notna().any(), 0.0)
# 批量填充空值
train_x[cols] = train_x[cols].fillna(col_fill_values)

这两种方式都能实现你的需求:每列单独判断,非全空列用自身均值填充空值,全空列用0填充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:55:16