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

Python3遍历多文件多Sheet的Excel并合并为DataFrame求助

批量合并多Excel文件多Sheet数据到单个DataFrame

你的代码核心问题是存储DataFrame的列表初始化和合并操作都放在了单个文件的循环内部,导致每处理一个新文件就会重置列表,最终只保留了最后一个文件的Sheet数据。以下是修正后的完整代码:

from xlsxwriter import Workbook
import pandas as pd
import openpyxl
import glob
import os

path = 'filestoimport/*.xlsx'

# 把存储所有Sheet数据的列表移到文件循环外部,确保能收集所有文件的数据
list_of_dfs = []
list_of_dferror = []

for filepath in glob.glob(path):
    xl = pd.ExcelFile(filepath)
    file_name = os.path.basename(filepath)
    
    for sheet_name in xl.sheet_names:
        df = xl.parse(sheet_name, usecols='A,D,N,B,C,E,F,G,H,I,J,K,L,M', header=0)
        df.columns = df.columns.str.replace(' ', '')

        df['sheetname'] = sheet_name
        df['sourcefilename'] = file_name
  
        # 只保留包含指定列的Sheet数据
        column_names = ['Status', 'ProjectID']
        if set(column_names).issubset(df.columns):
            df['Status'].fillna('', inplace=True)
            df['Addedby'].fillna('', inplace=True)
            list_of_dfs.append(df)
        else:
            # 可选:记录不符合条件的Sheet信息
            list_of_dferror.append({'file': file_name, 'sheet': sheet_name, 'reason': '缺少Status或ProjectID列'})

# 所有文件和Sheet遍历完成后,统一合并所有DataFrame
data = pd.concat(list_of_dfs, ignore_index=True)

# 可选:查看错误记录
# print("不符合条件的Sheet:", list_of_dferror)

关键修改说明

  • 列表初始化位置调整:将list_of_dfs从单个文件的循环内移到外部,避免每次处理新文件时清空之前收集的数据
  • 合并操作后置:把pd.concat放在所有文件遍历完成之后,确保合并的是所有符合条件的Sheet数据
  • 代码优化:将file_name的提取移到Sheet循环外部,避免重复计算;增加了错误Sheet的记录逻辑(可选使用)
  • 缩进修正:修正了原代码中if块内语句的缩进问题,确保逻辑执行正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:30:52