如何参照另一列姓名数据填充Gender列中的NaN缺失值
解决方案
普通Python的If-Else语句不能直接作用于pandas的Series整列数据,所以你之前的尝试会报错,用pandas向量化操作即可实现需求,以下是两种常用实现方式:
方式1:结合fillna + np.where实现(运行效率最高)
先确认你df中存储人员姓名的列名,替换代码中的姓名列字段即可:
import numpy as np boys_names = ['Robin Ounc', 'Chris Stew', 'Neil Bhor', ...] # 仅填充Gender列的空值,不会覆盖原有已经存在的性别数据 df['Gender'] = df['Gender'].fillna( np.where(df['姓名列'].isin(boys_names), 'M', 'F') )
方式2:用loc筛选空值行单独处理(逻辑更清晰,无需额外引入numpy)
# 筛选出Gender列为空的行掩码 gender_null_mask = df['Gender'].isna() # 对空值行单独匹配姓名规则赋值 df.loc[gender_null_mask, 'Gender'] = df.loc[gender_null_mask, '姓名列'].apply( lambda x: 'M' if x in boys_names else 'F' )
匹配优化建议
如果姓名存在大小写不统一、首尾有多余空格的情况,可以先做标准化再匹配,避免匹配遗漏:
# 先清洗男性姓名列表 clean_boys = [name.strip().lower() for name in boys_names] # 清洗df中的姓名字段后再匹配 df['Gender'] = df['Gender'].fillna( np.where(df['姓名列'].str.strip().str.lower().isin(clean_boys), 'M', 'F') )
内容的提问来源于stack exchange,提问作者Sticky
相关产品推荐
相关产品推荐

