使用guess_indian_gender库预测数据集性别所有结果均为男性如何解决
问题原因与解决方案
问题原因
guess_indian_gender库的predict方法原生不支持直接传入pandas Series类型参数,你传入dfna['name']时,方法会将整个Series识别为单个非法姓名输入,默认返回男性值,最终所有行被赋值为这个统一的返回结果。
解决方法
方法1:逐行调用(兼容性最高)
使用pandas的apply方法逐行传入单个姓名调用预测接口,修改后代码如下:
from guess_indian_gender import IndianGenderPredictor i = IndianGenderPredictor() dfna['predicted_gender'] = dfna['name'].apply(lambda x: i.predict(name=x))
方法2:批量传入列表(效率更高)
如果你的库版本支持批量传入姓名列表,可使用如下写法减少调用开销:
from guess_indian_gender import IndianGenderPredictor i = IndianGenderPredictor() dfna['predicted_gender'] = i.predict(name=dfna['name'].tolist())
优化建议
- 数据量较大时,可以先对姓名列去重后生成预测映射字典,再映射回原数据集,进一步降低重复计算开销:
# 生成唯一姓名的性别映射字典 name_gender_map = {name: i.predict(name=name) for name in dfna['name'].unique()} # 映射到原数据集 dfna['predicted_gender'] = dfna['name'].map(name_gender_map)
- 提前清洗姓名列的特殊符号、多余空格、非印度姓名内容,可提升预测准确率。
内容的提问来源于stack exchange,提问作者Sarthak Gupta
相关产品推荐
相关产品推荐

