如何使用Pandas DataFrame按现有比例插补分类列的缺失值?
如何用Pandas按现有类别比例填充分类列的缺失值?
当然可以!Pandas完全能轻松实现你的需求——在保留Refferer列已有字符串类别比例的前提下,自动填充所有NaN值,完美维持原数据的分布特征。下面是具体的实现步骤:
第一步:先确认现有类别的占比
首先我们需要提取Refferer列各分类的相对比例,用value_counts(normalize=True)就能直接获取:# 计算Refferer列每个类别的占比 referrer_proportions = df['Refferer'].value_counts(normalize=True) # 打印出来确认比例是否符合预期 print(referrer_proportions)这个操作会返回每个类别在非缺失数据中的相对频率,也就是你需要的比例基准。
第二步:按比例生成填充值并填充
接下来我们用numpy.random.choice根据刚才得到的比例,生成和缺失值数量匹配的填充值,再把这些值填入对应的NaN单元格:import numpy as np # 定位所有Refferer列缺失值的索引 missing_indices = df[df['Refferer'].isna()].index # 按照原类别比例随机抽取对应数量的填充值 fill_values = np.random.choice( referrer_proportions.index, # 可选的类别列表 size=len(missing_indices), # 需要填充的缺失值数量 p=referrer_proportions.values # 每个类别的抽取概率(即原比例) ) # 将生成的填充值填入缺失位置 df.loc[missing_indices, 'Refferer'] = fill_values第三步:验证填充结果
填充完成后,你可以再检查一下类别比例,确认和原数据的分布一致(因为是随机抽样,可能会有极微小的误差,但样本量越大越接近原比例):# 查看填充后的类别比例 print(df['Refferer'].value_counts(normalize=True))
这个方法既简单又高效,完全能满足你保留类别比例的要求。
内容的提问来源于stack exchange,提问作者Víctor Mouriño
相关产品推荐
相关产品推荐

