首页 > 解决方案 > 用分类变量中的用户定义值替换 nan 值

问题描述

考虑 pandas 数据帧中的一个分类变量,其中一些条目是 NaN 值,例如

User Name
1     Joe 
2     nan    
3     Joe     
4    Mark  
5     nan  
6     Joe

我想用一个用户定义的函数替换 nan 值,该函数保留名称的频率,即分别将权重 [0.75, 0.25] 分配给 ['Joe', 'Mark']。这可以通过 random.choices 轻松完成,如何使用 pandas 将值插入数据帧?

标签: pythonpandascategorical-datafillna

解决方案


value_countsnormalize=True获取权重,然后设置空值loc

import numpy as np

p = df.Name.value_counts(normalize=True)  # Series of probabilities
m = df.Name.isnull()

np.random.seed(42)
rand_fill = np.random.choice(p.index, size=m.sum(), p=p)
#array(['Joe', 'Mark'], dtype=object)

df.loc[m, 'Name'] = rand_fill

#   User  Name
#0     1   Joe
#1     2   Joe
#2     3   Joe
#3     4  Mark
#4     5  Mark
#5     6   Joe

推荐阅读