如何按男女比例填充DataFrame中sex列缺失值并修改原数据集

问题原因
你之前代码失效的核心原因是使用了链式索引,pandas对链式索引返回的是数据集副本,所有修改不会作用到原DataFrame。
实现方案
步骤1:计算原数据男女比例&缺失值数量
# 统计非缺失值的男女分布 sex_dist = CleanedDF[CleanedDF['sex'] != 'NA']['sex'].value_counts(normalize=True) female_pct = sex_dist['Female'] male_pct = sex_dist['Male'] # 统计需要填充的缺失值总数 na_count = CleanedDF['sex'].eq('NA').sum()
步骤2:按比例生成填充值并写入原数据集
import numpy as np # 提取所有缺失值的行索引 na_idx = CleanedDF[CleanedDF['sex'] == 'NA'].index # 按原男女比例随机生成填充值,设置随机种子可固定结果方便复现 np.random.seed(42) fill_data = np.random.choice(['Female', 'Male'], size=na_count, p=[female_pct, male_pct]) # 直接通过loc写入原数据集,无链式索引,修改直接生效 CleanedDF.loc[na_idx, 'sex'] = fill_data
验证修改结果
# 查看剩余缺失值数量,应为0 print(CleanedDF['sex'].eq('NA').sum()) # 查看填充后的男女比例,和原有非缺失值比例一致 print(CleanedDF['sex'].value_counts(normalize=True))
注意事项
如果你的缺失值是pandas原生NaN而非字符串'NA',只需要把所有判断条件CleanedDF['sex'] == 'NA'替换为CleanedDF['sex'].isna()即可。
内容的提问来源于stack exchange,提问作者SimpleMind
相关产品推荐
相关产品推荐

