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

