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

如何解决CSV文件十六进制转十进制时的int()类型错误?

解决int() can't convert non-string with explicit base错误

这个错误的核心原因是:int(x, 16)要求输入的x必须是字符串类型,但你的数据中存在非字符串内容(比如已被解析为整数/浮点数的数值、空值NaN,或者格式不符合预期的十六进制值)。

解决方案步骤

1. 先排查数据类型与异常值

先确认目标列的元素类型,找出非字符串的内容:

cols = ['CAN ID', 'D[0]', 'D[1]', 'D[2]', 'D[3]', 'D[4]', 'D[5]', 'D[6]', 'D[7]']
# 查看每列的数据类型
print(data_combined[cols].dtypes)
# 查看每个元素的具体类型
print(data_combined[cols].apply(lambda col: col.map(type)))

2. 修改转换函数,兼容非字符串与异常值

替换原lambda函数为带类型处理、异常捕获的函数,覆盖多种情况:

import pandas as pd

def hex_to_int(x):
    try:
        # 统一转为字符串并去除首尾空格
        x_str = str(x).strip()
        # 兼容带0x/0X前缀的十六进制字符串
        if x_str.lower().startswith('0x'):
            return int(x_str, 0)  # int(x,0)自动识别进制
        # 处理纯十六进制字符串
        return int(x_str, 16)
    except (ValueError, TypeError):
        # 无效值/空值返回NaN,也可根据需求改为0或其他默认值
        return pd.NA

3. 应用转换函数到目标列

data_combined[cols] = data_combined[cols].applymap(hex_to_int)
data_combined.head()

4. 从源头避免问题:读取CSV时指定字符串类型

如果CSV读取时自动将十六进制值解析为整数,可在读取阶段直接指定所有目标列为字符串类型:

data_combined = pd.read_csv('your_file.csv', dtype={col: str for col in cols})

内容的提问来源于stack exchange,提问作者RITU RAI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:22:48