如何在Pandas中基于已有数据分布随机填充Age category列缺失值?
按现有分布填充Pandas数据框的缺失值
要实现按现有非缺失数据的分布填充Age category列的NaN值,核心思路是按原类别占比随机抽取对应类别进行填充,这样能最大程度保证填充后的整体分布与原数据一致,具体步骤如下:
1. 获取现有数据的类别分布
如果已经明确知道各分类的占比(如36 - 45占29.5%、46 - 55占24.9%),可以直接手动定义分类列表和对应概率;如果需要从数据中自动提取更准确的分布,执行以下代码:
import pandas as pd import numpy as np # 从非缺失值中提取类别及对应占比 category_probs = df['Age category'].value_counts(normalize=True)
执行后category_probs会返回每个类别及其对应的占比(如36 - 45 0.295)。
2. 按分布随机填充缺失值
定位所有缺失值的位置,然后根据提取的占比随机选择类别填充:
# 获取所有缺失值的索引 na_indices = df[df['Age category'].isna()].index # 按原分布随机生成填充值 fill_values = np.random.choice( category_probs.index, size=len(na_indices), p=category_probs.values ) # 赋值填充 df.loc[na_indices, 'Age category'] = fill_values
如果是手动给定的占比,只需替换category_probs.index和category_probs.values为自定义的分类列表和概率列表即可,示例:
# 手动定义分类和对应概率 custom_categories = ['36 - 45', '46 - 55', '其他类别'] custom_probs = [0.295, 0.249, 0.456] fill_values = np.random.choice( custom_categories, size=len(na_indices), p=custom_probs )
3. 验证填充后的分布
填充完成后,可通过以下代码查看新的分布,确认与原数据差异:
print(df['Age category'].value_counts(normalize=True))
内容的提问来源于stack exchange,提问作者weizer
相关产品推荐
相关产品推荐

