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

Python转换DataFrame数据类型时报ValueError: invalid literal for int() with base 10: ' '怎么解决

报错原因
  • 你当前的replace逻辑仅覆盖了C/F/Z三个字符的映射,数据集里还存在未被匹配的纯空格字符串,这类值没有被替换为数值,无法直接通过astype(int)转换为整数,就触发了这个值错误。
  • 若数据集里还有其他字母、特殊符号、前后带空格的有效值(比如' C '),也会触发同类报错,本次报错日志明确给出的非法值是空格' '。
修复方案

你可以根据自己的业务需求选择以下任意一种修复方式:

方法1:补充替换规则覆盖空格(适配当前报错最快)

直接把空格加入替换映射,设置为你业务可接受的标记值即可,示例如下:

# 补充空格的映射规则,可根据需求调整空格对应的数值
df_tr = df1_dlq_slice.replace({'C': -1, 'F': -2, 'Z': -3, ' ': -4}).astype(int).T
df_tr.head()

如果还有其他空白字符比如制表符、换行符,也可以同步加入映射规则。

方法2:自动处理所有非法值(灵活度最高)

如果不想硬编码所有异常字符,可以用pd.to_numeric把所有非法值统一转为空值,再用pandas支持空值的Int64整数类型转换:

# errors='coerce'会把所有不能转数值的内容统一设为NaN
df_tr = df1_dlq_slice.replace({'C': -1, 'F': -2, 'Z': -3})\
                     .apply(pd.to_numeric, errors='coerce')\
                     .astype('Int64')\
                     .T
df_tr.head()

方法3:先清洗空白再转换(适配值前后带空格的场景)

如果是单元格值前后有多余空格导致的匹配失败,可以先全局做去空格处理再执行后续逻辑:

# 先对所有字符串列做去前后空格处理
df_tr = df1_dlq_slice.apply(lambda x: x.str.strip() if x.dtype == 'object' else x)\
                     .replace({'C': -1, 'F': -2, 'Z': -3, '': -4})\
                     .astype(int)\
                     .T
df_tr.head()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:54:03