Python实现:合并多Excel文件并统一相似表头为指定名称
解决Excel多文件合并并统一相似表头的问题
核心思路
先定义表头映射规则,把所有包含Supplier/Vendor关键词的表头统一映射为Supplier ID,读取每个文件后先重命名列,再只保留需要的Supplier ID和Ticket ID列,最后合并所有数据。
修改后的代码
import pandas as pd import os # 定义表头映射:将相似表头统一为目标列名 header_mapping = { 'Vendor ID': 'Supplier ID', 'Supplier original ID': 'Supplier ID', 'Supplier ID': 'Supplier ID', # 可按需添加其他需要映射的表头 } # 源Excel文件所在文件夹路径(根据实际路径修改) folder_path = './excel_files' all_processed_data = [] # 遍历文件夹内所有Excel文件 for filename in os.listdir(folder_path): if filename.endswith(('.xlsx', '.xls')): file_full_path = os.path.join(folder_path, filename) df = pd.read_excel(file_full_path) # 按规则重命名列 df = df.rename(columns=lambda col_name: header_mapping.get(col_name, col_name)) # 处理意外出现的多列Supplier ID(横向填充后取第一列) if 'Supplier ID' in df.columns: df['Supplier ID'] = df['Supplier ID'].bfill(axis=1).iloc[:, 0] # 只保留需要的列,缺失列自动填充空值 required_columns = ['Ticket ID', 'Supplier ID'] df = df.reindex(columns=required_columns) all_processed_data.append(df) # 合并所有数据并保存 final_merged_df = pd.concat(all_processed_data, ignore_index=True) final_merged_df.to_excel('merged_master.xlsx', index=False)
关键代码说明
header_mapping:集中管理表头映射规则,后续新增相似表头直接追加键值对即可。df.rename(columns=lambda col_name: header_mapping.get(col_name, col_name)):遍历所有列名,匹配到规则的替换为目标名,未匹配的保留原名。df.reindex(columns=required_columns):确保最终只保留指定列,即使源文件缺少某列,也会生成空值列,避免合并报错。- 多列合并逻辑:若某文件意外出现多个映射后的
Supplier ID列,用横向填充后取第一列,避免数据丢失。
额外提示
如果需要保留其他列,直接修改required_columns列表添加对应列名即可。
内容的提问来源于stack exchange,提问作者Marcelo Estrada
相关产品推荐
相关产品推荐

