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

IntCastingNaNError求助:如何将字符串列转为数值或分类值

解决IntCastingNaNError:字符串列转数值/分类值的方案

你的错误核心原因是sex列中存在不在{'male','female'}范围内的值(比如空值、其他字符串),调用map后这些值会被转为NaN,而NaN属于非有限值,无法直接转换为整数类型,因此触发IntCastingNaNError。以下是针对性解决方案:

1. 先处理缺失/异常值,再转换为整数

1.1 填充缺失/异常值为指定整数

如果希望把未知性别统一标记为特定值(比如2代表未知),可先填充NaN再转整数:

import pandas as pd

# 映射后填充NaN为2,再转换为int64
data['sex'] = data['sex'].map({'male': 1, 'female': 0}).fillna(2).astype('int64')

1.2 删除含缺失/异常值的行

如果数据量充足,且缺失/异常值无保留价值,可直接删除对应行:

# 删除映射后sex列为NaN的行
data = data.dropna(subset=['sex'])
# 执行映射和类型转换
data['sex'] = data['sex'].map({'male': 1, 'female': 0}).astype('int64')

1.3 处理大小写不一致的情况

如果sex列存在大小写混乱(比如Male/FEMALE),先统一格式再映射:

# 统一转为小写后再映射,避免因大小写导致的NaN
data['sex'] = data['sex'].str.lower().map({'male': 1, 'female': 0}).fillna(2).astype('int64')

2. 转换为分类类型

如果无需转为整数,而是想保留原始类别信息,可直接转为Categorical类型,无需处理NaN:

# 转为分类类型
data['sex'] = pd.Categorical(data['sex'])

# 若需要分类的数值编码,可用cat.codes(NaN会被编码为-1)
data['sex_code'] = data['sex'].cat.codes

3. 用replace替代map灵活处理

replace仅替换指定值,未匹配的值可保留或统一设置:

# 仅替换male/female,其他值保留原类型
data['sex'] = data['sex'].replace({'male': 1, 'female': 0})

# 把非male/female的值统一设为2,再转整数
data['sex'] = data['sex'].replace({'male': 1, 'female': 0}).fillna(2).astype('int64')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:40:37