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

Pandas十六进制DataFrame转整数浮点数及拆列报错解决方案

报错原因

int() can't convert non-string with explicit base错误触发原因:

  • str.split(expand=True)拆分后,若每行十六进制串长度不一致,会自动填充None作为缺失值,列内会混合字符串与空值,并非全是字符串类型
  • pandas的object是通用混合类型dtype,即使是字符串拆分得到的列,只要存在非字符串值(空值、数值等)都会显示为object类型,不代表列内全是字符串。
    直接对整列传入int(base=16)时,碰到空值/非字符串值就会触发类型错误。
实现方案

无需手写显式循环,使用pandas内置向量化操作即可完成,性能远高于逐行循环:

import pandas as pd

# 第一步:清洗拆分后的数据,去除单元格前后空白,统一空值格式
x_df = x_df.apply(lambda col: col.str.strip()).replace('', pd.NA)

# 第二步:按规则分组列
int_cols = header[:24]  # 前24列转换为整数
float_cols = header[24:-1]  # 第25列到倒数第二列(排除末尾Checksum列)转换为浮点数
checksum_col = ["Checksum"]  # 校验和列默认按十六进制整数处理

# 第三步:逐单元格把十六进制字符串转为整数,自动跳过空值
x_df = x_df.applymap(lambda val: int(val, base=16) if pd.notna(val) else pd.NA)

# 第四步:按列规则转换对应数据类型
x_df[int_cols + checksum_col] = x_df[int_cols + checksum_col].astype("Int64")  # 用pandas可空整数类型,兼容空值
x_df[float_cols] = x_df[float_cols].astype("float64")

如果你的浮点数列是多字节拼接的(比如相邻2/4个单字节组合为长十六进制数后再转浮点),只需在第三步转换前增加字节拼接逻辑即可,示例:

# 示例:若T列需要拼接"22""23"两个单字节的十六进制值再转浮点
x_df["T"] = x_df.apply(lambda row: int(f"{row['22']}{row['23']}", base=16), axis=1).astype("float64")
  • 转换完成后可通过x_df.dtypes查看各列类型,通过x_df.head()验证转换结果是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:27:16