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

如何用Pandas按指定概率随机替换数据集中的缺失值?

按非缺失值分布概率替换缺失值的实现方法

直接上可运行的步骤和代码,核心是用numpy按指定概率生成随机样本,再批量替换缺失值:

  1. 先获取正确的非缺失值分布
    你之前的代码没排除"?",会导致概率计算包含缺失值,所以先过滤掉"?"再算占比:

    # 提取Feature1列非"?"的所有值,计算各唯一值的占比
    feature1_dist = df[df['Feature1'] != ' ?']['Feature1'].value_counts(normalize=True)
    
  2. 定位缺失值位置并确定需要填充的样本数量

    # 找出所有Feature1为"?"的行索引
    missing_indices = df[df['Feature1'] == ' ?'].index
    # 统计缺失值的数量
    n_missing = len(missing_indices)
    
  3. 按概率生成填充样本
    用np.random.choice直接按分布抽取对应数量的样本,比循环高效得多:

    import numpy as np
    
    # 从非缺失值的唯一值中,按之前计算的概率抽取n_missing个样本
    filled_values = np.random.choice(feature1_dist.index, size=n_missing, p=feature1_dist.values)
    
  4. 批量替换缺失值
    用loc直接定位缺失位置赋值,避免循环逐个处理:

    df.loc[missing_indices, 'Feature1'] = filled_values
    

补充说明

  • 循环逐个处理在数据量大的时候会很慢,批量操作是Pandas的最优实践
  • 确保feature1_dist.values的概率和为1(Pandas的value_counts(normalize=True)会自动处理,只要非缺失值不为空)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:02:01