如何随机填充分类数据的NaN?

How to fill NaN for categorical data randomly?

我有一个像这样的 table:

Sex SchGend
M Boys
F Girls
NaN Mixed
NaN Boys

我想在此 table 中填充 NaN 值(其中有 10000 个)。 SchGend 告诉学校是只招收男孩,只招收女孩,还是两者兼而有之。因此,为了填充第 4 行,我想将 M 作为性别,但为了填充混合学校的 NaN,我想用随机值来填充。我不知道如何在 pandas.

的 fillna 方法中设置条件

这就是我的问题:我该怎么做?有什么建议吗?

首先,填写学校信息中已知值的值。然后随机填充剩余的。 您可以使用 random.choices 生成随机序列的“M”和“F”(如果您愿意,numpy.random 中应该有替代函数)。

如果您运行以下内容,您将获得第三条记录的不同结果。

from io import StringIO
import random
import pandas as pd

data = """
Sex SchGend
M   Boys
F   Girls
NaN Mixed
NaN Boys
"""

x = pd.read_csv(StringIO(data), sep="\t")

# fill cases of boys or girls school
x.loc[x.SchGend == "Boys", "Sex"] = "M"
x.loc[x.SchGend == "Girls", "Sex"] = "F"

num_na = x.Sex.isna().sum()  # number of missing cases
x.loc[x.Sex.isna(), "Sex"] = random.choices(["M", "F"], k=num_na)
x