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
相关产品推荐
相关产品推荐

