如何随机填充分类数据的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
我有一个像这样的 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