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

如何使用pandas将CAN总线十六进制字符串切片拆分为多列?

CAN总线十六进制报文拆分实现方案

Python 批量处理方案(适配大量报文场景)

依赖pandas库做结构化处理,支持批量拆分、转二进制一步完成,示例代码如下:

import pandas as pd

# 1. 加载你的报文数据,读本地csv可直接用pd.read_csv(),此处默认已有存储报文的DataFrame,报文字段名为data
# 2. 按2字符(1字节)拆分,输出8列对应CAN报文的8个字节
byte_split = df['data'].str.extractall('(..)')[0].unstack()
byte_split.columns = [f'byte_{i}' for i in range(8)]
# 拆分结果合并回原数据集
df = pd.concat([df, byte_split], axis=1)

# 3. 按1字符(半字节)拆分,输出16列
nibble_split = df['data'].str.extractall('(.)')[0].unstack()
nibble_split.columns = [f'nibble_{i}' for i in range(16)]
df = pd.concat([df, nibble_split], axis=1)

# 4. 十六进制转8位补零二进制字符串示例
df['byte_0_bin'] = df['byte_0'].apply(lambda x: bin(int(x, 16))[2:].zfill(8))

以你提供的第一条报文0087CE5481900307为例,拆分后byte_0为00、byte_1为87、byte_2为CE,依次匹配8字节顺序。

Excel 小批量处理方案

如果数据量小不需要写代码,直接用MID函数拆分即可:

  • 按2字符拆分第n个字节:=MID(报文所在单元格, 2*(n-1)+1, 2),比如第一个字节公式为=MID(A2,1,2),右拉填充8列即可完成全部分割
  • 按1字符拆分的话修改为=MID(报文所在单元格, n, 1),右拉填充16列即可

Shell 快速处理方案

如果是纯文本格式的报文日志,用awk一行即可完成拆分输出:

# 按2字符拆分每一行的报文字段
awk '{printf "%s ", $2; for(i=1;i<=16;i+=2) printf "%s ", substr($2,i,2); print ""}' 你的报文文件路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:30:06