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

如何将源Excel表名设为合并后DataFrame的行标识?

给合并后的DataFrame添加源Excel表名/文件名标识的解决方案

核心思路

不要直接合并原始DataFrame,而是在读取每个Excel文件/工作表时,给对应的DataFrame新增一列存入来源文件或工作表的名称,最后再执行合并操作。


场景1:每个Excel文件仅含一个工作表(新增文件名标识)

import pandas as pd
import os

# 定义要合并的Excel文件路径列表
file_paths = ["sales_2023.xlsx", "sales_2024.xlsx", "sales_2025.xlsx"]
processed_dfs = []

for file in file_paths:
    # 读取单个Excel文件
    df = pd.read_excel(file)
    # 新增列存储来源文件名(仅保留文件名,不含路径)
    df["source_file"] = os.path.basename(file)
    # 如果需要保留完整文件路径,替换为:df["source_file"] = file
    processed_dfs.append(df)

# 合并所有处理后的DataFrame
merged_df = pd.concat(processed_dfs, ignore_index=True)

场景2:单个Excel文件含多个工作表(新增文件名+工作表名标识)

如果需要区分同一文件下的不同工作表来源,可以同时记录文件名和工作表名:

import pandas as pd
import os

file_paths = ["all_sales.xlsx", "all_invoices.xlsx"]
processed_dfs = []

for file in file_paths:
    # 打开Excel文件,获取所有工作表名称
    xls = pd.ExcelFile(file)
    file_name = os.path.basename(file)
    
    for sheet_name in xls.sheet_names:
        # 读取单个工作表
        df = pd.read_excel(xls, sheet_name=sheet_name)
        # 新增来源标识列
        df["source_file"] = file_name
        df["source_sheet"] = sheet_name
        processed_dfs.append(df)

# 合并并重置索引
merged_df = pd.concat(processed_dfs, ignore_index=True)

关键注意事项

  • ignore_index=True:合并后重置索引,避免多个原始DataFrame的索引重复冲突
  • 列不一致处理:如果各表列名不完全匹配,pd.concat默认使用join="outer"保留所有列,缺失值填充为NaN;若只需保留共同列,可设置join="inner"
  • 自定义标识:可根据需求修改列名(比如改为data_source)或添加更多元信息(如文件创建时间)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:17:09