如何用Python实现类似SAS Macro的多Excel文件批量处理流程
实现批量迭代处理的极简方案
核心逻辑是把仅需执行一次的Base数据预处理放在循环外,仅把单业务数据文件的处理逻辑放在循环内执行,避免重复计算,同时自动匹配导出文件名。
完整可运行代码
# 导入依赖包 import pandas as pd import os # -------------------------- # 1. 仅执行一次Base数据预处理 # -------------------------- base_path = r'替换为你的Base_Data.xlsx实际路径' df_base = pd.read_excel(base_path) df_base = df_base.sort_values(by='CustomerNumber') df_base = df_base.drop_duplicates('CustomerNumber') # -------------------------- # 2. 获取所有待处理的业务数据文件列表 # -------------------------- # 方法1:手动指定文件列表(文件数量少的场景) # data_files = [ # r'...\Data_Dec2019.xlsx', # r'...\Data_Mar2020.xlsx', # r'...\Data_Jun2020.xlsx', # # 新增其他文件路径即可 # ] # 方法2:自动扫描目录下所有Data_开头的xlsx文件(文件数量多的场景,推荐) data_dir = r'替换为你存放所有Data_xxx.xlsx的文件夹路径' data_files = [os.path.join(data_dir, f) for f in os.listdir(data_dir) if f.startswith('Data_') and f.endswith('.xlsx')] # -------------------------- # 3. 循环处理每个文件 # -------------------------- export_dir = r'替换为你想要存放导出结果的文件夹路径' for file_path in data_files: # 读取单个业务数据文件 df_data = pd.read_excel(file_path) # 业务数据清洗(你的原有逻辑,后续有调整直接改这部分即可) df_data = df_data.groupby(['CustomerNumber'])['Amount'].sum().reset_index() # 关联合并 df_mapped = pd.merge(df_base, df_data, on="CustomerNumber", how="inner") # 自动生成导出文件名:提取原文件的时间标识,比如Data_Dec2019.xlsx → Dec2019 file_name = os.path.basename(file_path) time_tag = file_name.replace('Data_', '').replace('.xlsx', '') export_path = os.path.join(export_dir, f'Merged_{time_tag}.xlsx') # 导出结果 df_mapped.to_excel(export_path, index=False)
优化建议
如果你的实际数据处理逻辑较长,可以将业务数据清洗的部分封装为独立函数,后续维护仅需调整函数内部逻辑即可,示例如下:
def clean_data(df_raw): # 把你所有的复杂清洗逻辑放在这里 df_clean = df_raw.groupby(['CustomerNumber'])['Amount'].sum().reset_index() # 其他清洗步骤... return df_clean # 循环内调用即可 df_data = clean_data(pd.read_excel(file_path))
内容的提问来源于stack exchange,提问作者Abdul Mateen Hashim
相关产品推荐
相关产品推荐

