如何解决np.random.choice 向量化时不返回正确的权重
感谢@tdelaney 指导我完成我的第一篇文章,我不得不编辑它:
import pandas as pd
import numpy as np
# This is a hypothetical line to generate a df with a column similar to the one which I'm having trouble with:
dataset_2021 = pd.DataFrame({"genero_usuario":["M","M",None,"F",None]})
数据集有一个包含用户性别的字符串列:“M”代表男性,“F”代表女性,还有一些我想插补的空值。我使用非空值的 value_counts() 获得了“M”和“F”的权重:M = 0.656,F = 0.344(这是来自我的数据集,我写的测试给出了 0.6 和 0.4)
以下代码行完美运行,并在具有足够大的数据集时返回正确的权重(在上面给出的小型测试数据集中,它稍微改变了它)。问题是,由于我的 df 的大小,执行时间太长:
dataset_2021["genero_usuario"] = dataset_2021["genero_usuario"].apply(lambda x : x if pd.isnull(x) == False else np.random.choice(a = ["M","F"],p=[0.656,0.344]))
我想使用的更快的矢量化版本不起作用。第一次尝试:
dataset_2021.loc[dataset_2021.genero_usuario.isnull(),dataset_2021.genero_usuario] = np.random.choice(a = ["M",0.344])
这会引发错误:
Cannot mask with non-boolean array containing NA / NaN values
第二次尝试:
dataset_2021.fillna(value = {"genero_usuario" : np.random.choice(a = ["M",0.344])},inplace = True)
这会估算空值,但会降低“M”的权重并增加“F”的权重:value_counts() 给出 M 0.616 和 F 0.384。
提前致谢
解决方法
np.random.choice
返回一个值,因此您将相同的值分配给所有空单元格。
因此,您必须首先找到所有空值并生成足够的随机值来填补所有空白:
mask = dataset_2021["genero_usuario"].isnull()
dataset_2021["genero_usuario"][mask] = np.random.choice(size=mask.sum(),a=["M","F"],p=[0.716,0.284])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。