如何用Pandas单循环读取多目录Excel并生成唯一DataFrame
多目录Excel文件合并实现方案
问题描述
我有四个目录,需要读取其中所有Excel文件,执行一些转换后最终合并为一个DataFrame。目前已编写代码读取C:\Users\A目录下的文件并完成初步转换:
os.chdir(r'C:\Users\A') allFiles = glob.glob("*.xlsx") # match your excels li = [] for file in allFiles: df = pd.read_excel(file) li.append(df) frame_A = pd.concat(li, axis=0, ignore_index=True) frame_A.to_excel(r'C:\Users\A\A.xlsx',index=None)
现在我还需要读取C:\Users\B等目录的Excel文件,生成frame_B这类唯一命名的DataFrame,最终合并所有DataFrame。请问如何仅用一个循环实现该需求?
解决方案
你可以把所有要处理的目录放进一个列表,用循环遍历每个目录,同时用字典来存每个目录对应的DataFrame——这样既能自动生成frame_A、frame_B这类唯一命名的变量,又能一次性完成所有目录的读取、合并,最后再把所有DataFrame合并到一起。
直接上代码:
import os import glob import pandas as pd # 把所有需要处理的目录都列在这里 target_dirs = [r'C:\Users\A', r'C:\Users\B', r'C:\Users\C', r'C:\Users\D'] # 用字典存每个目录的合并结果,键就是frame_A、frame_B这类名字 dir_frames = {} for dir_path in target_dirs: # 自动提取目录名,比如从C:\Users\A里拿到A dir_name = os.path.basename(dir_path) os.chdir(dir_path) # 获取当前目录下所有xlsx文件 all_files = glob.glob("*.xlsx") li = [] for file in all_files: df = pd.read_excel(file) # 这里可以加你需要的转换操作,比如清洗数据、新增列之类的 li.append(df) # 合并当前目录的所有Excel文件 current_frame = pd.concat(li, axis=0, ignore_index=True) # 把结果存入字典,键名就是frame_目录名 dir_frames[f'frame_{dir_name}'] = current_frame # 保存当前目录的合并文件(可选操作,不需要可以删掉) current_frame.to_excel(os.path.join(dir_path, f'{dir_name}.xlsx'), index=None) # 最后合并所有目录的DataFrame成最终的总表 final_merged_frame = pd.concat(dir_frames.values(), axis=0, ignore_index=True) # 可选:保存最终合并结果 # final_merged_frame.to_excel(r'C:\Users\final_merged.xlsx', index=None)
逻辑说明
- 用
target_dirs统一管理所有目录,后续要加目录或者改路径,直接改这个列表就行,不用动循环逻辑。 - 字典
dir_frames用来存每个目录的合并结果,自动生成frame_A、frame_B这样的键名,既满足你要的唯一命名需求,之后要单独调用某个目录的结果也方便(比如dir_frames['frame_A']就能拿到A目录的合并表)。 - 循环里复用了你原来的读取、合并逻辑,只是把固定路径换成了循环变量,不用重复写多段几乎一样的代码。
- 最后一行
pd.concat(dir_frames.values())直接把所有目录的DataFrame合并成一个,一步到位。
内容的提问来源于stack exchange,提问作者Django0602
相关产品推荐
相关产品推荐

