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

求助:用Python实现CAN总线日志按秒分组并转宽表格式

处理CAN总线CSV日志的Python实现

先看个原始CSV的例子,方便理解转换逻辑:

原始日志示例:
Timestamp,Can ID,data,datalength
2024-05-20 12:00:01,0x123,010203,6
2024-05-20 12:00:01,0x456,0405,4
2024-05-20 12:00:02,0x123,060708,6
2024-05-20 12:00:02,0x789,09,2

下面是直接能用的Python代码,用Pandas完成转换:

import pandas as pd

# 读取原始CAN日志CSV,记得把文件名换成你自己的
df = pd.read_csv('can_log.csv', parse_dates=['Timestamp'])

# 核心转换:把Timestamp设为行,Can ID设为列,填充对应data值
# 要是同一秒同一个Can ID有多条数据,这里用'last'取最后一条,按需换成'first'取第一条
pivoted_df = df.pivot_table(
    index='Timestamp',
    columns='Can ID',
    values='data',
    aggfunc='last'
)

# 把Timestamp从索引转成普通列(可选,不想转就删掉这行)
pivoted_df = pivoted_df.reset_index()

# 把缺失值换成空字符串(可选,默认是NaN,觉得看着别扭就加这行)
pivoted_df = pivoted_df.fillna('')

# 保存成新的CSV文件,文件名自己改
pivoted_df.to_csv('formatted_can_log.csv', index=False)

关键步骤说明

  • parse_dates=['Timestamp']:确保时间戳被正确识别为日期格式,避免后续转换出问题
  • pivot_table:这一步是核心,帮你把行和列重新排列,aggfunc用来处理重复数据,比如同一秒同一ID有多个data的情况,选合适的聚合方式就行
  • fillna(''):把没有数据的单元格换成空字符串,比默认的NaN看着清爽

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:25:43