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

用随机值填充连续变量列空值失效,应如何修正代码实现功能?

问题原因分析
  • 操作逻辑倒置:df.mask(condition)方法的作用是将数据框中条件为True的位置替换为NaN,你现有代码的效果是随机将全表20%的有效数据置为空,和“填充空值”的目标完全相反。
  • 操作范围错误:代码作用于整个数据框,没有单独筛选连续变量列,会误修改分类、文本等非连续列的数据。
  • 无赋值操作:pandas的所有转换方法默认返回修改后的新对象,你没有将运行结果赋值给原变量或者新变量,运行后原数据框不会发生任何变更。
  • 缺少填充逻辑:整段代码没有任何针对已有空值的赋值规则,自然无法实现填充效果。
调整后实现代码

如果你是要填充数据框中已存在的连续变量列空值,可以使用如下代码:

import numpy as np
import pandas as pd

# 筛选所有连续数值类型的列
continuous_cols = df.select_dtypes(include=['number']).columns

# 遍历每一列填充空值
for col in continuous_cols:
    # 跳过没有空值的列
    na_count = df[col].isna().sum()
    if na_count == 0:
        continue
    # 取当前列非空值的最小、最大值作为随机数生成范围,保证填充值符合列的数值分布区间
    col_min = df[col].min()
    col_max = df[col].max()
    # 生成随机数填充到空值位置
    df.loc[df[col].isna(), col] = np.random.uniform(low=col_min, high=col_max, size=na_count)

如果你原本的需求是先随机将连续列20%的数值置为空,再用随机数填充这些空值,可以使用如下代码:

import numpy as np
import pandas as pd

# 筛选所有连续数值类型的列
continuous_cols = df.select_dtypes(include=['number']).columns

# 随机将连续列20%的数值置为空
df[continuous_cols] = df[continuous_cols].mask(np.random.choice([True, False], size=df[continuous_cols].shape, p=[.2,.8]))

# 遍历填充空值
for col in continuous_cols:
    na_count = df[col].isna().sum()
    if na_count == 0:
        continue
    col_min = df[col].min()
    col_max = df[col].max()
    df.loc[df[col].isna(), col] = np.random.uniform(low=col_min, high=col_max, size=na_count)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:54:06