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

Python for循环解析二进制所得值如何转为指定列的DataFrame

解决方案

核心思路:每次struct.unpack返回的元组本身就是一一对应的(time, count)单行数据,不需要内层循环拆成单个值打印,先把所有行收集到列表中,再一次性转为DataFrame即可。

修正后的完整代码

import struct
import pandas as pd

def bin_to_raw(file):
    data_rows = []
    # 每次步进12字节,对应单条记录的长度(8字节long类型time + 4字节int类型count)
    for i in range(0, len(file), 12):
        # 解包直接得到成对的time、count值
        time_val, count_val = struct.unpack('< q i', file[i:i + 12])
        data_rows.append((time_val, count_val))
    # 构造DataFrame,指定列名和预期格式一致
    result_df = pd.DataFrame(data_rows, columns=['time', 'count'])
    return result_df

说明

  • 原代码的内层for values in data循环会把成对的time、count拆成独立值逐个输出,破坏了行对应关系,直接去掉这层循环即可。
  • 最终返回的result_df格式完全匹配需求,time列和count列的值一一对应,和当前打印输出的数值顺序完全一致。
  • 如果要复用原有代码里定义的field_names变量,可以把DataFrame构造的columns参数改为columns=field_names,无需重复写列名。
  • 原代码中定义的header_len = 12目前没有实际作用,如果二进制文件实际存在12字节的文件头,只需要把range的起始值从0改成header_len即可跳过头部内容,从有效数据段开始解析。
  • 注意传入的file参数必须是二进制读取得到的bytes对象,读取源文件时需要用rb模式打开,否则struct解析会出现异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:21:23