python - 将 nan 值替换为分类变量中用户定义的值

标签 python pandas categorical-data fillna

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

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

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

最佳答案

value_counts 使用 normalize=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

关于python - 将 nan 值替换为分类变量中用户定义的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57577188/

相关文章:

javascript - 计算每个数组项的出现次数并将结果作为对象返回

python - MATLAB 函数 unique 的 Python 等价物

python - 从 Django South 的重复迁移中恢复

python - django 上长时间运行的守护进程

python - 如何使用对应字典重命名 pd.value_counts() 索引

python - 在一行 Pandas 数据框中找到第一个真值

Python正则表达式在字符串的开头和结尾提取子字符串

python - 使用 .loc 选择 DatetimeIndex 行范围(Pandas Python 3)

python - 训练和测试集上的不同标签编码器值不好吗?

python - 标签对连续的多个分类值进行编码