如何用pandas.concat()合并多文件夹同名DataFrame并保存
使用pandas.concat()合并多文件夹下同名CSV文件
文件分布情况
folder1/ df1.csv df4.csv df5.csv folder2/ df1.csv df3.csv df4.csv folder3/ df4.csv
目标效果
合并后生成finalfolder,包含以下文件:
finalfolder/ df1.csv (合并folder1和folder2的内容) df3.csv (来自folder2) df4.csv (合并folder1、folder2、folder3的内容) df5.csv (来自folder1)
实现方案
核心思路
- 按文件名对所有CSV文件分组,收集每个文件名对应的所有文件路径
- 对每组同名文件,读取为DataFrame后用
pandas.concat()合并 - 创建目标文件夹,将合并后的结果保存为CSV
完整代码
import pandas as pd import os from collections import defaultdict # 定义待处理文件夹列表和目标文件夹 folders = ["folder1", "folder2", "folder3"] target_folder = "finalfolder" # 创建目标文件夹(不存在则自动创建) os.makedirs(target_folder, exist_ok=True) # 按文件名分组存储对应的文件路径 file_groups = defaultdict(list) for folder in folders: for filename in os.listdir(folder): if filename.endswith(".csv"): file_path = os.path.join(folder, filename) file_groups[filename].append(file_path) # 遍历每组文件,合并并保存 for filename, file_paths in file_groups.items(): # 读取所有同名文件为DataFrame列表 dfs = [pd.read_csv(path) for path in file_paths] # 合并DataFrame并重置索引 merged_df = pd.concat(dfs, ignore_index=True) # 保存到目标文件夹 save_path = os.path.join(target_folder, filename) merged_df.to_csv(save_path, index=False)
代码说明
defaultdict(list):自动按文件名分组,无需手动判断分组逻辑os.makedirs(..., exist_ok=True):避免因目标文件夹已存在而报错pd.concat(..., ignore_index=True):合并后重置索引,避免出现重复索引问题to_csv(index=False):保存时不写入索引列,避免生成多余的列
内容的提问来源于stack exchange,提问作者Gun
相关产品推荐
相关产品推荐

