如何修改Python脚本批量处理多Excel文件并生成对应新DataFrame
批量处理Excel文件并生成关联命名DataFrame
问题根源
原代码的核心问题出在文件名/数据对象的处理逻辑上:
- 错误地将DataFrame对象作为字典键传入
ingest_excel_files函数,而DataFrame是不可哈希类型,无法作为字典键使用 - 处理逻辑没有关联原文件名生成带
_new后缀的目标DataFrame - 操作函数仅修改原DataFrame,未保留处理后的独立副本
修正后的代码
import pandas as pd def ingest_excel_files(file_paths): """读取多个Excel文件,返回以原文件名为键的DataFrame字典""" data_frames = {} for file_path in file_paths: # 提取不带后缀的文件名,比如"file1.xlsx"转为"file1" file_name = file_path.split('.')[0] data_frames[file_name] = pd.read_excel(file_path) return data_frames def process_and_create_new_dfs(data_frames): """对每个DataFrame执行计算,生成带_new后缀的独立DataFrame,存入字典返回""" new_data_frames = {} for file_name, df in data_frames.items(): # 创建副本避免修改原数据 df_new = df.copy() df_new["New Column"] = df_new["Column A"] + df_new["Column B"] # 用原文件名+_new作为键存储 new_data_frames[f"{file_name}_new"] = df_new # 可选:保存处理后的Excel文件 df_new.to_excel(f"{file_name}_new.xlsx", index=False) return new_data_frames if __name__ == "__main__": # 要处理的4个Excel文件路径 file_paths = ["file1.xlsx", "file2.xlsx", "file3.xlsx", "file4.xlsx"] # 读取原始数据 original_dfs = ingest_excel_files(file_paths) # 处理并生成带_new后缀的DataFrame new_dfs = process_and_create_new_dfs(original_dfs) # 示例:访问处理后的DataFrame print("处理后的file1_new数据:") print(new_dfs["file1_new"]) print("\n处理后的file4_new数据:") print(new_dfs["file4_new"])
关键调整说明
- 读取文件时提取纯文件名作为字典键,避免文件后缀干扰
- 处理时创建DataFrame的副本,保证原数据不被修改,同时生成独立的
_new版本 - 用字典统一管理所有处理后的DataFrame,键名与原文件名直接关联(如
file1对应file1_new) - 可选保存处理后的Excel文件,命名规则与DataFrame保持一致
匹配预期效果
修正后的代码执行后,new_dfs字典中会包含file1_new、file2_new、file3_new、file4_new四个独立的DataFrame,每个都已添加计算后的New Column,完全匹配预期需求。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

