如何在pandas中搭配偏移量使用chunksize分块读取csv文件
pandas大文件分块读取保留重叠行实现方案
可以实现该需求。pandas.read_csv本身没有内置重叠分块的参数,但可以通过手动缓存上一分块尾部数据的方式,基于原生的chunksize迭代逻辑完成该需求。
核心逻辑
- 初始化空DataFrame用于缓存上一分块的末尾300行数据
- 调用
pd.read_csv指定chunksize参数获取分块迭代器 - 每一轮迭代时,将缓存的历史尾部数据和当前新读取的分块拼接,得到带重叠区域的可用分块
- 迭代完成业务处理后,提取当前分块的最后300行更新缓存,供下一轮拼接使用
代码示例
import pandas as pd # 自定义配置 file_path = "目标CSV文件路径.csv" chunksize = 10000 # 单次读取的基础行数,可根据内存调整 overlap_rows = 300 # 需要保留的上一分块重叠行数 # 初始化缓存容器,存储上一分块的尾部数据 prev_tail = pd.DataFrame() # 分块读取迭代 for chunk in pd.read_csv(file_path, chunksize=chunksize): # 拼接重叠数据和当前分块,ignore_index避免索引重复 current_usable_chunk = pd.concat([prev_tail, chunk], ignore_index=True) # 此处编写你对current_usable_chunk的业务处理逻辑 # 例如数据清洗、特征计算、过滤统计等 print(f"当前处理分块行数:{len(current_usable_chunk)}") # 更新缓存:取当前分块的最后overlap_rows行,供下一轮迭代使用 prev_tail = chunk.tail(overlap_rows)
边界说明
- 第一轮迭代时缓存为空,第一个分块不会额外增加重叠数据,符合常规业务逻辑
- 如果最后一个分块的行数不足300行,
tail方法会自动取全部剩余行,不会抛出异常 - 可根据实际内存大小、业务需求灵活调整
chunksize和overlap_rows的数值
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

