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

如何使用Python堆叠多个Excel文件数据并保证合并顺序正确

解决pandas批量合并Excel时堆叠顺序与文件夹内文件排序不一致问题

问题根因

glob.glob() 方法返回的文件路径列表不保证固定排序,遍历顺序完全由操作系统的文件系统底层逻辑决定,因此会出现堆叠顺序和你在文件夹中看到的排序不一致的情况。

解决方案

对glob.glob()返回的文件路径列表先按照你的需求排序,再遍历读取合并即可。

修改后可直接运行的代码

import pandas as pd
import glob
import os

# 读取所有目标Excel文件路径
file_paths = glob.glob("/Users/xxxx/xxxx/xxxx/Data/*.xlsx")
# 基础排序:按文件名字母/数字升序排列,适配文件名带日期(如20240101.xlsx)的场景
sorted_file_paths = sorted(file_paths)

# 如果你需要按文件修改时间排序,替换上方排序逻辑为以下代码即可
# sorted_file_paths = sorted(file_paths, key=lambda x: os.path.getmtime(x))

# 遍历读取文件并合并
df_list = []
for f in sorted_file_paths:
    df = pd.read_excel(f, sheet_name='data')
    # 可选操作:新增来源文件名列,方便后续排查顺序问题
    # df['source_file'] = os.path.basename(f)
    df_list.append(df)

# 合并时加ignore_index重置行索引,避免多个子表索引重复
all_data = pd.concat(df_list, ignore_index=True)

# 保存结果
with pd.ExcelWriter('output.xlsx') as writer:
    # 加index=False不输出默认行索引,减少冗余字段
    all_data.to_excel(writer, sheet_name='sheet1', index=False)

自定义排序适配方案

如果你的文件名规则特殊,基础排序不符合需求,可以自定义排序key,比如文件名格式为「门店A_2024-01-01_业绩表.xlsx」,可以提取其中的日期字段排序:

def extract_sort_key(file_path):
    file_name = os.path.basename(file_path)
    # 提取文件名中的日期字符串
    date_str = file_name.split("_")[1]
    # 转成时间格式作为排序依据
    return pd.to_datetime(date_str)

sorted_file_paths = sorted(file_paths, key=extract_sort_key)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:36:03