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

如何高效读取文件夹内多份大Excel文件并合并为单个DataFrame

优化大型Excel文件合并效率的方案

你的代码慢的核心原因是每次调用df.append()都会生成一个新的DataFrame,反复复制数据,在处理大文件时会产生巨量的内存开销和时间消耗。下面是针对性的优化方案:

核心优化代码

import os
import pandas as pd

file_path = "你的目标文件夹路径"
dfs_collection = []  # 用列表统一存储所有工作表的数据

for file_name in os.listdir(file_path):
    # 跳过临时文件
    if '~$' in file_name:
        continue
    full_file_path = os.path.join(file_path, file_name)
    
    # 根据文件后缀选择高效读取引擎
    if file_name.endswith('.xlsb'):
        read_engine = 'pyxlsb'
    elif file_name.endswith('.xlsx'):
        read_engine = 'openpyxl'
    elif file_name.endswith('.xls'):
        read_engine = 'xlrd'  # 若报错可替换为xlrd2
    else:
        continue  # 跳过非Excel格式文件
    
    # 上下文管理器自动释放资源
    with pd.ExcelFile(full_file_path, engine=read_engine) as xls:
        for sheet_name in xls.sheet_names:
            # 读取单个工作表数据
            sheet_data = pd.read_excel(xls, sheet_name=sheet_name)
            dfs_collection.append(sheet_data)

# 一次性合并所有数据,这步比循环append快几十倍
final_df = pd.concat(dfs_collection, ignore_index=True)

关键优化点

  • 用列表收集再一次性合并:避免append()的反复数据复制,把所有小DataFrame存在列表里,最后用pd.concat()合并,这是效率提升最明显的环节。
  • 指定高效读取引擎:不同格式的Excel对应不同的高效引擎,比如二进制格式的.xlsb用pyxlsb读取,速度和内存占用都远优于默认引擎(需要先通过pip install pyxlsb openpyxl xlrd安装依赖)。
  • 上下文管理器管理文件资源:避免文件句柄泄漏,同时让代码更规范。

额外优化建议

  • 如果不需要所有列,用usecols参数指定要读取的列,减少数据量。
  • 提前指定列的数据类型(比如dtype={'列名': 'category'}),避免pandas自动推断类型的开销,同时降低内存占用。
  • 若内存不足,可以拆分文件分批处理,但1.98GB的总数据在16G以上内存的电脑上,用上面的方法基本能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:10:03