基于模板Excel实现多非标准化Excel的Python自动化合并方案咨询
思路可行性与实现方案
你的这个表头映射模板思路完全可行,而且完美适配当前表头未标准化、还需3-4个月才能稳定的场景——把表头匹配逻辑从代码里剥离到外部模板后,后续只需要维护template.xlsx,不用频繁修改Python脚本,能大幅减少重复劳动。
一、template.xlsx的结构设计
建议模板用单个Sheet存储映射关系,列定义如下:
| Company Name | Source Header | Standard Header |
|---|---|---|
| Tata | Reg number | Car_Reg_No# |
| Tata | Chasis | Car_ChasisNo# |
| BMW | Car_Reg# | Car_Reg_No# |
| BMW | Car_Engine Number | Car_Engine No# |
Company Name:必须和Excel文件名(比如Tata.xlsx)完全对应,确保脚本能精准匹配Source Header:对应各公司Excel里的原始表头内容Standard Header:统一的目标表头(即最终Master Dataframe的列名)
二、Python实现步骤与代码示例
用pandas就能轻松实现,核心逻辑是:读取映射模板→按公司生成表头映射字典→遍历Excel文件→匹配映射并转换列→合并成总表。
1. 依赖安装
如果还没装依赖,先执行:
pip install pandas openpyxl
(openpyxl用于读写xlsx格式文件)
2. 完整代码
import pandas as pd import glob # ---------------------- # 1. 读取表头映射模板 # ---------------------- template_df = pd.read_excel("template.xlsx", engine="openpyxl") # 按公司分组,生成{公司名: {源表头: 标准表头}}的字典 header_mappings = {} for company, group in template_df.groupby("Company Name"): header_mappings[company] = dict(zip(group["Source Header"], group["Standard Header"])) # ---------------------- # 2. 遍历并处理所有Excel文件 # ---------------------- master_df = pd.DataFrame() # 假设所有待合并的Excel都放在"excel_files"文件夹下,可根据实际路径修改 excel_file_paths = glob.glob("excel_files/*.xlsx") for file_path in excel_file_paths: # 从文件名提取公司名(比如从"excel_files/Tata.xlsx"中拿到"Tata") file_name = file_path.split("/")[-1] company_name = file_name.replace(".xlsx", "") # 跳过无映射的公司文件 if company_name not in header_mappings: print(f"⚠️ 未找到{company_name}的表头映射,跳过该文件") continue # 获取当前公司的表头映射规则 current_mapping = header_mappings[company_name] try: # 只读取映射中存在的源表头,减少内存占用 df = pd.read_excel(file_path, usecols=current_mapping.keys(), engine="openpyxl") # 重命名列为标准表头 df.rename(columns=current_mapping, inplace=True) # 添加Company标识列 df["Company"] = company_name # 合并到总表 master_df = pd.concat([master_df, df], ignore_index=True) print(f"✅ 成功处理{file_name}") except Exception as e: print(f"❌ 处理{file_name}失败:{str(e)}") # ---------------------- # 3. 导出最终的Master Dataframe # ---------------------- master_df.to_excel("Master_Dataframe.xlsx", index=False, engine="openpyxl") print("📝 已生成Master Dataframe文件")
三、优化建议
- 必填列校验:可以在模板里加一列
Is Required,脚本里检查每个公司的必填列是否存在,避免漏核心数据 - 空值处理:在合并前统一处理空值,比如用
df.fillna("")或按业务规则填充默认值 - 批量更新模板:如果有多个公司表头变动,直接在Excel里批量编辑映射,比改代码高效得多
- 日志记录:把处理日志写到文件里,方便后续排查异常问题
内容的提问来源于stack exchange,提问作者pythonThor
相关产品推荐
相关产品推荐

