当前位置: 首页 > news >正文

Python分块读取大型Excel文件

文章目录

  • 一、核心特性
  • 二、使用示例
  • 三、性能建议
  • 四、适用场景
  • 五、相关文章


传统方法在处理大型Excel文件时可能面临内存不足的问题。以下方法通过分块读取适合处理数百MB甚至GB级别的Excel文件。

一、核心特性

内存高效:采用分块处理机制,避免一次性加载整个文件到内存
灵活配置:可自定义分块大小、工作表选择和表头设置
生成器模式:以迭代方式返回数据,适合流式处理
自动清理:正确处理文件资源,避免内存泄漏

二、使用示例

import pandas as pd
from openpyxl import load_workbook
from typing import Generator, Optionaldef read_excel_in_chunks(file_path: str,chunk_size: int = 1000,sheet_name: Optional[str] = None,header: Optional[int] = 0,
) -> Generator[pd.DataFrame, None, None]:"""分块读取大型 Excel 文件,避免内存不足。Args:file_path (str): Excel 文件路径。chunk_size (int): 每块的行数(默认 1000)。sheet_name (str): 工作表名(默认第一个工作表)。header (int): 表头所在行(默认第 0 行,无表头设为 None)。Yields:pd.DataFrame: 每个分块的 DataFrame。"""# 以只读模式打开 Excel 文件wb = load_workbook(file_path, read_only=True)# 选择工作表if sheet_name is not None:sheet = wb[sheet_name]else:sheet = wb.active  # 默认第一个工作表# 读取表头(如果有)headers = []if header is not None:for row in sheet.iter_rows(min_row=header + 1, max_row=header + 1, values_only=True):headers = list(row)# 分块读取数据chunk_data = []start_row = (header + 1) if header is not None else 1  # 数据起始行for i, row in enumerate(sheet.iter_rows(min_row=start_row, values_only=True), start=1):chunk_data.append(row)# 每积累 chunk_size 行,生成一个 DataFrameif i % chunk_size == 0:yield pd.DataFrame(chunk_data, columns=headers)chunk_data = []# 处理剩余行(不足 chunk_size 的部分)if chunk_data:yield pd.DataFrame(chunk_data, columns=headers)# 关闭工作簿wb.close()for dfdf_chunk in read_excel_in_chunks(f'big.xlsx', chunk_size=1000):# 可以转换为字典列表data=df_chunk.to_dict(orient='records')...

三、性能建议

分块大小:根据可用内存调整,通常1000-10000行/块较为合适
无表头文件:设置header=None可跳过表头解析
工作表选择:明确指定sheet_name比使用默认工作表更高效

四、适用场景

大数据量 Excel 文件处理
内存受限环境下的数据分析
数据分批导入数据库
流式数据预处理

五、相关文章

Pandas读写Excel文件

http://www.lryc.cn/news/610720.html

相关文章:

  • 豆包新模型与 PromptPilot 实操体验测评,AI 辅助创作的新范式探索
  • LangGraph学习笔记 — LangGraph中State状态模式
  • 自动驾驶控制算法——MPC控制算法
  • qq scheme
  • GaussDB 并行创建索引
  • 使用iptables的nat链表进行端口转发
  • 基于MATLAB实现的频域模态参数识别方法
  • 算法3. 无重复字符的最长子串
  • Django中的转发与重定向详解
  • Boosting 知识点整理:机制、对比与应用场景
  • 统计鱼儿分布情况 Java
  • 复制网页文字到Word、WPS文字?选中后直接拖放
  • C语言线程同步详解(互斥锁、信号量、条件变量和读写锁)
  • Apache OFBiz Scrum 组件命令注入漏洞
  • FLAN-T5:大规模指令微调的统一语言模型框架
  • C++(线程)
  • 恶魔轮盘赌
  • Java Date类介绍
  • 前端保持和服务器时间同步的方法【使用vue3举例】
  • 利用m0改造循迹模块处理笔记00
  • 强光干扰下误报率↓82%!陌讯多模态融合算法在火焰识别的落地优化
  • 服务器数据恢复—坏道致Raid5阵列硬盘离线如何让数据重生?
  • Linux 系统启动原理2
  • 2025年服务器漏洞生存指南:从应急响应到长效免疫的实战框架
  • Pandas query() 方法详解
  • 防水防尘防摔性能很好的智能三防手机,还有22000mAh大电池
  • 手机通话检测数据集介绍-3,100 张图片 智能监控系统 驾驶安全监控
  • 联发科芯片组曝高危漏洞:越界写入缺陷危及智能手机与物联网设备安全
  • Tasks and Deadlines(Sorting and Searching)
  • 云手机和实体手机之间的区别