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

Pandas读取Feather文件时是否存在chunksize等效参数

Feather文件分块读取实现方法

pandas.read_feather() 本身没有提供和 read_csv 同名的 chunksize 参数,你可以通过以下两种方式实现完全等效的分块读取效果,适配你原来的分块处理逻辑。


方案1:轻量实现(适合中小体积Feather文件)

先通过元数据快速获取文件总行数(不会加载全量数据到内存),再按固定步长切片读取即可,代码逻辑和你原来的chunksize使用习惯对齐:

import pandas as pd
import pyarrow.feather as feather

# 配置和原read_csv一致的分块大小
CHUNK_SIZE = 10
file_path = r"C:\Users\Saad.Saleem\Downloads\message.feather"

# 仅读取文件元数据获取总行数,内存开销可以忽略
total_rows = feather.read_metadata(file_path).num_rows

# 逐块迭代处理
for start_idx in range(0, total_rows, CHUNK_SIZE):
    end_idx = min(start_idx + CHUNK_SIZE, total_rows)
    # 读取对应行范围的数据块,可通过columns参数指定只加载需要的列进一步降低内存占用
    chunk_df = pd.read_feather(
        file_path,
        columns=None # 例:columns=["msg_time", "content"] 即只读取这两列
    ).iloc[start_idx:end_idx]
    
    # 在此处写入你原来针对每个分块df的处理逻辑即可
    print(f"当前处理分块行数:{len(chunk_df)}")

方案2:流式读取(适合GB级大体积Feather文件,性能最优)

如果你的文件体积很大,全量加载后再切片会占用过高内存,可以直接用pyarrow的原生批次读取接口,全程不会把全量数据加载进内存,和csv的chunksize底层逻辑一致:

import pyarrow.feather as feather

CHUNK_SIZE = 10
file_path = r"C:\Users\Saad.Saleem\Downloads\message.feather"

# 以只读方式打开Feather文件
with feather.open_table(file_path) as feather_table:
    # 按指定块大小切分数据批次
    for batch in feather_table.to_batches(max_chunksize=CHUNK_SIZE):
        # 把当前批次转成pandas DataFrame
        chunk_df = batch.to_pandas()
        
        # 在此处写入分块处理逻辑
        print(f"当前处理分块行数:{len(chunk_df)}")

补充说明:Feather是列式存储格式,读取时指定只加载需要的列,带来的内存优化效果比分块读取更明显,如果你的处理逻辑不需要用到所有列,优先配置columns参数筛选列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:36:21