用分类变量中用户定义的值替换 nan 值
Replace nan values by user defined values in categorical variables
考虑 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
考虑 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