python - 用分类变量中的用户定义值替换 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 将值插入数据帧?
解决方案
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
推荐阅读
- javascript - Jest 是否异步运行用 describe() 定义的测试套件?
- qt - TableView QML 类型 onClicked 事件
- php - 如何组合成单个变量数组
- java - 如何检查函数是否第一次运行?
- alm - 使用 python 从 ALM OTA 获取用户字段
- android - 无法使用提供的参数调用 requestLocationUpdates()
- css - 多个框阴影在 MSEdge 中不起作用
- javascript - 用于设置 CSS 属性的变量属性
- react-native - 无法在 Salesforce Lightning Chatter 页面 iOS web 视图中打开附件
- r - ggplot2 中小中断的较短刻度线