You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Housing数据集yes/no转0/1时,应用二进制映射出现NaN问题排查

问题原因及解决办法

出现NaN的核心原因是你的映射字典没有匹配到数据中的实际值,常见两种情况:

  • 字符串大小写不匹配:比如数据里存的是"Yes"、"NO"或者大小写混合格式,而映射字典只写了小写的"yes"和"no",匹配失败就会返回NaN。
  • 数据中存在非yes/no的其他值:比如空字符串、带空格的" yes "、拼写错误的字符串(如"ye"),这些值不在映射字典范围内,同样会生成NaN。

验证问题的方法

先检查目标列的所有唯一值,确认是否存在不匹配的情况:

for col in varlist:
    print(f"列 {col} 的唯一值:", housing[col].unique())

解决办法

方法1:统一字符串大小写后再映射

先把所有字符串转成小写(或大写),再执行映射,解决大小写不匹配问题:

def binary_map(x):
    return x.str.lower().map({"yes": 1, "no": 0})

housing[varlist] = housing[varlist].apply(binary_map)

方法2:直接用replace替换(更简洁)

replace支持多键值对替换,可直接处理多种大小写变体:

replace_dict = {"yes":1, "no":0, "Yes":1, "NO":0, "YES":1, "No":0}
housing[varlist] = housing[varlist].replace(replace_dict)

方法3:处理带空格的异常值

如果数据里有带前后空格的" yes ",先去除空格再映射:

def binary_map(x):
    return x.str.strip().str.lower().map({"yes": 1, "no": 0})

housing[varlist] = housing[varlist].apply(binary_map)

方法4:保留/统一处理无法匹配的值

如果不想丢弃非yes/no的值,可保留原内容或统一设为固定值:

# 保留无法匹配的原内容
housing[varlist] = housing[varlist].apply(lambda x: x.map({"yes":1, "no":0}).fillna(x))

# 把无法匹配的值统一设为0
housing[varlist] = housing[varlist].apply(lambda x: x.map({"yes":1, "no":0}).fillna(0))

内容的提问来源于stack exchange,提问作者kzs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:25:11