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

如何用Python分块读取大型XLSX文件?(偏好使用Pandas)

分块读取大型Excel文件(Pandas实现)

Pandas的read_excel不像read_csv那样直接支持chunksize参数,但可以通过结合Excel引擎和迭代器的方式实现分块读取,避免一次性加载整个大文件。

方法1:基于openpyxl引擎逐块读取(适合超大型文件)

借助openpyxl的只读模式迭代行数据,分块转换为DataFrame处理,内存占用更低:

import pandas as pd
from openpyxl import load_workbook

# 以只读模式加载工作簿,减少内存开销
wb = load_workbook(filename='m.xlsx', read_only=True)
ws = wb.active  # 获取默认活动工作表,也可指定表名如wb['Sheet1']

chunk_size = 10000  # 定义每块读取的行数,可根据内存调整
header = [cell.value for cell in next(ws.iter_rows(min_row=1, max_row=1))]  # 提取表头

# 逐块迭代读取数据
for start_row in range(2, ws.max_row + 1, chunk_size):
    end_row = min(start_row + chunk_size - 1, ws.max_row)
    # 读取当前块的行数据
    chunk_rows = []
    for row in ws.iter_rows(min_row=start_row, max_row=end_row):
        chunk_rows.append([cell.value for cell in row])
    # 转换为DataFrame
    df_chunk = pd.DataFrame(chunk_rows, columns=header)
    
    # 在这里处理当前块数据,比如清洗、统计、写入数据库等
    print(f"处理第{start_row-1}至{end_row-1}行数据")
    print(df_chunk.describe())  # 示例处理:打印块数据统计信息

wb.close()

方法2:结合pd.ExcelFile分块读取(适合中大型文件)

通过skiprows和nrows参数控制每次读取的范围,实现分块加载:

import pandas as pd

chunk_size = 10000
file_path = 'm.xlsx'

# 先获取文件总行数(含表头)
with pd.ExcelFile(file_path) as xls:
    sheet_name = xls.sheet_names[0]
    total_rows = pd.read_excel(xls, sheet_name=sheet_name, usecols=[0]).shape[0]

# 分块读取并处理
for skip_rows in range(0, total_rows, chunk_size):
    # 读取当前块数据:第一块保留表头,后续块跳过表头
    df_chunk = pd.read_excel(
        file_path,
        sheet_name=sheet_name,
        skiprows=skip_rows,
        nrows=chunk_size,
        header=None if skip_rows != 0 else 0
    )
    # 非第一块手动设置表头
    if skip_rows != 0:
        df_chunk.columns = pd.read_excel(file_path, sheet_name=sheet_name, nrows=0).columns
    
    # 处理当前块数据
    print(f"处理第{skip_rows+1}至{min(skip_rows+chunk_size, total_rows)}行数据")
    print(df_chunk.head())

注意事项

  • 需提前安装openpyxl引擎:pip install openpyxl
  • 可根据自身内存情况调整chunk_size,比如5000或20000行
  • 处理完每块数据后,可通过del df_chunk及时释放内存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:00:50