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
相关产品推荐
相关产品推荐

