使用pandas与glob按每4个一组合并Excel生成P1-P305对应文件
Excel按点位拆分合并实现方案
提供两种可直接运行的实现方案,输出效果完全一致,可根据自己的场景选择。
方案1:按点位分组直接拼接源文件(推荐)
该方案无需先生成全量合并文件,直接根据文件名前缀将同一点位的4个文件归为一组,横向拼接后单独导出,不会出现列错位问题,大文件场景下内存占用更低。
import os import glob import pandas as pd from collections import defaultdict # 读取当前目录下所有xlsx格式文件 file_list = glob.glob("*.xlsx") # 过滤掉可能已生成的结果文件,避免重复读取 file_list = [f for f in file_list if os.path.basename(f) != "Final.xlsx"] # 按点位名分组存储文件 point_group = defaultdict(list) for filename in file_list: # 从文件名提取点位标识,例:从P1-a.xlsx提取P1 point_id = filename.split("-")[0] point_group[point_id].append(filename) # 逐组拼接并导出 for point_id, group_files in point_group.items(): df_container = [] for file in group_files: print(f"读取文件:{file}") temp_df = pd.read_excel(file, header=None) df_container.append(temp_df) # 横向拼接逻辑和原全量合并代码完全一致 merged_point_df = pd.concat(df_container, axis=1) merged_point_df.to_excel(f"{point_id}.xlsx", index=None)
方案2:基于已生成的Final_df按列拆分
如果已经完成全量文件合并生成了Final_df,可以直接按每4列为一组切分DataFrame后导出,无需重复读取所有源文件,运行速度更快。
import pandas as pd # 读取已生成的全量合并表 final_df = pd.read_excel("Final.xlsx", header=None) # 固定参数:共305个点位,每个点位对应4列数据 point_count = 305 col_per_point = 4 for idx in range(point_count): # 计算当前点位对应的列索引区间 col_start = idx * col_per_point col_end = col_start + col_per_point # 切分对应列 point_df = final_df.iloc[:, col_start:col_end] point_name = f"P{idx+1}" print(f"导出文件:{point_name}.xlsx") point_df.to_excel(f"{point_name}.xlsx", index=None)
注意事项
- 方案2仅适用于原全量合并时文件读取顺序完全符合P1-a→P1-b→P1-c→P1-d→P2-a……→P305-d的场景,如果glob读取文件时顺序错乱,拆分结果会出现列错位
- 如果无法确认原文件读取顺序,优先选择方案1,分组逻辑完全基于文件名,不会出现错位问题
内容的提问来源于stack exchange,提问作者babak asadolah
相关产品推荐
相关产品推荐

