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

pd.read_excel内存占用疑问及Excel分块读取替代方案咨询

分块读取大Excel文件为DataFrame的方案

关于pd.read_excel(nrows, skiprows, usecols)的内存占用

使用nrows、skiprows、usecols参数时,pandas不会将整个Excel文件加载到内存。它会通过底层引擎(如openpyxl、xlrd)仅读取指定的行和列,内存占用仅对应你实际读取的那部分数据。需要注意:

  • 旧版xlrd(仅支持.xls格式)在部分场景下会读取整个工作表的结构,但数据本身不会全量加载;
  • 多次调用read_excel分块读取时,每次都会重新打开文件,会增加少量IO开销,但对内存影响可忽略。

替代分块方案

1. pandas循环分块读取

手动控制分块逻辑,先获取总行数再分批读取:

import pandas as pd

# 获取表头和总行数
df_header = pd.read_excel('large_file.xlsx', nrows=0)
total_rows = pd.read_excel('large_file.xlsx', usecols=[0]).shape[0]

chunk_size = 10000  # 每批次读取10000行
for i in range(0, total_rows, chunk_size):
    chunk = pd.read_excel(
        'large_file.xlsx',
        skiprows=i+1,  # 跳过表头和已读取的行
        nrows=chunk_size,
        columns=df_header.columns
    )
    # 在此处处理当前分块数据,如写入数据库、统计分析等
    process_chunk(chunk)

2. Dask DataFrame

Dask完全支持Excel文件,它会自动将文件分块,采用延迟计算模式,不会一次性加载全量数据到内存。使用示例:

import dask.dataframe as dd

# 读取Excel文件,自动分块
ddf = dd.read_excel('large_file.xlsx', engine='openpyxl')

# 执行延迟计算(如求均值),仅在调用compute()时实际运算
result = ddf['target_column'].mean().compute()

# 按分块迭代处理
for chunk in ddf.partitions:
    pandas_df = chunk.compute()
    process_chunk(pandas_df)

注意:需提前安装依赖包pip install dask-excel openpyxl。

3. 底层Excel库逐行读取

用openpyxl只读模式逐行读取,手动构建DataFrame分块,内存占用极低:

from openpyxl import load_workbook
import pandas as pd

wb = load_workbook('large_file.xlsx', read_only=True)  # 只读模式减少内存开销
ws = wb.active

chunk_size = 10000
rows = []
for idx, row in enumerate(ws.iter_rows(values_only=True)):
    if idx == 0:
        columns = row  # 提取表头
        continue
    rows.append(row)
    if len(rows) >= chunk_size:
        chunk = pd.DataFrame(rows, columns=columns)
        process_chunk(chunk)
        rows = []
# 处理剩余未达分块大小的数据
if rows:
    chunk = pd.DataFrame(rows, columns=columns)
    process_chunk(chunk)
wb.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 14:52:35