如何将源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
相关产品推荐
相关产品推荐

