Logistic Regression项目target列字符串转整数出现NaN问题
问题原因
map方法在遇到不在映射字典key中的值时,会默认返回NaN,你遇到的问题本质是第一次映射后的target列中存在与retarget2的两个key不完全匹配的值。
排查步骤
先执行以下代码查看target列的所有唯一值,定位不匹配的内容:
print(hr['target'].unique())
解决方案
- 情况1:字符串存在首尾空格/大小写差异
如果输出的字符串前后有空白字符,或者大小写和定义的key不一致,先统一处理字符串再映射:
# 先去除首尾空格,如有大小写差异可追加.str.lower()统一大小写 hr['target'] = hr['target'].str.strip().map(retarget2)
- 情况2:第一次映射存在漏转的值
如果原始target列同时存在整数型的0/1和浮点型的0.0/1.0,第一次映射时只会转换浮点型的值,未匹配的整数会变为NaN,后续第二次映射也会保留NaN。可以在第一次映射时统一数值类型再处理:
# 第一次映射时先统一转浮点型 retarget = {0.0: 'Not looking for job change', 1.0: 'Looking for job change'} hr['target'] = hr['target'].astype(float).map(retarget)
- 更稳妥的转回数值方案
无需手动定义反向映射字典,直接通过条件判断生成0/1值,避免匹配错误:
# 匹配目标字符串为1,其余为0 hr['target'] = (hr['target'] == 'Looking for job change').astype(int)
如果需要保留原始NaN不转为0,可以增加判断:
import numpy as np hr['target'] = np.where(hr['target'].isna(), np.nan, (hr['target'] == 'Looking for job change').astype(int))
内容的提问来源于stack exchange,提问作者Python Learner
相关产品推荐
相关产品推荐

