如何解决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
相关产品推荐
相关产品推荐

