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

Colab中Python垃圾邮件检测报ValueError无法转非有限值为整数如何解决

报错原因

你调用map方法时,dt['type']列中存在不在映射字典{'Spam':1, 'ham':0}键中的值(比如拼写变体、空值NaN、其他非法分类值),这些值经过map处理后会被默认转为NaN。而你使用的pandas版本中,原生int类型不支持存储NaN值,执行astype(int)时就会触发该报错。
你可以先执行以下代码确认type列的所有取值情况:

print(dt['type'].value_counts(dropna=False))
解决方法
  • 方案1:先过滤异常值,仅保留合法分类后再做类型转换,适合不允许异常值进入后续训练的场景:
# 仅保留type为Spam/ham的行,避免产生NaN
dt = dt[dt['type'].isin(['Spam', 'ham'])].copy()
dt['Spam'] = dt['type'].map({'Spam':1, 'ham':0}).astype(int)
  • 方案2:使用pandas可空整数类型,允许存在NaN值,适合需要保留所有行的场景(要求pandas版本≥0.24):
# 注意Int64为首字母大写的pandas专属可空整数类型
dt['Spam'] = dt['type'].map({'Spam':1, 'ham':0}).astype('Int64')
  • 方案3:先填充NaN为默认值再转int,适合可以给异常值分配默认标签的场景:
# 示例将异常值默认标记为非垃圾邮件0,可根据需求修改填充值
dt['Spam'] = dt['type'].map({'Spam':1, 'ham':0}).fillna(0).astype(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:36:02