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

如何在Polars中读取指定格式的打包字节数据并生成DataFrame

解决方案

要将这种二进制格式的文件加载为Polars DataFrame,你需要结合Python的struct模块解析二进制数据,再转换为DataFrame。以下是具体实现步骤:

1. 明确格式映射关系

先对应qqiffff格式符到Polars数据类型:

  • q:64位有符号整数 → Polars Int64
  • i:32位有符号整数 → Polars Int32
  • f:32位浮点数 → Polars Float32

这个格式正好对应7个字段,匹配你的列名列表长度。

2. 代码实现

import polars as pl
import struct

# 替换为你实际的列名列表
column_names = ["col1", "col2", "col3", "col4", "col5", "col6", "col7"]
# 定义数据格式符
fmt = "qqiffff"
# 计算单条记录的字节大小
record_size = struct.calcsize(fmt)

# 读取并解析二进制文件
with open("your_data_file.bin", "rb") as f:
    # 一次性读取所有数据,批量解析
    raw_data = f.read()
    # 按记录大小拆分并解析所有数据
    records = [struct.unpack(fmt, raw_data[i:i+record_size]) 
               for i in range(0, len(raw_data), record_size)]

# 转换为Polars DataFrame
df = pl.DataFrame(records, schema=column_names)

优化版(大文件场景)

如果文件体积较大,使用struct.iter_unpack可以更高效地逐块解析:

import polars as pl
import struct

column_names = ["col1", "col2", "col3", "col4", "col5", "col6", "col7"]
fmt = "qqiffff"

with open("your_data_file.bin", "rb") as f:
    # 直接迭代解析文件流中的记录
    records = list(struct.iter_unpack(fmt, f))

df = pl.DataFrame(records, schema=column_names)

显式指定Schema类型(可选)

为了避免Polars自动推断类型出错,你可以显式定义每个列的类型:

schema = pl.Schema([
    ("col1", pl.Int64),
    ("col2", pl.Int64),
    ("col3", pl.Int32),
    ("col4", pl.Float32),
    ("col5", pl.Float32),
    ("col6", pl.Float32),
    ("col7", pl.Float32)
])

df = pl.DataFrame(records, schema=schema)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 14:15:01