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

