如何将多组重复表头表格合并为低维DataFrame?求解代码卡点
解决横向重复表头Excel转规整二维表格的Pandas方案
核心思路
原Excel为横向排列的多组重复表头模块(每组含姓名、性别、部门、工资4列),通过拆分模块-统一表头-堆叠合并的方式,将分散的横向数据转换为每行对应一位员工的规整表格。
完整代码实现
import pandas as pd # 读取目标Excel文件 df = pd.read_excel('./重新合并列表.xlsx', sheet_name='结果2') # 清理表格中的全空行与全空列,排除无效空白干扰 cleaned_df = df.dropna(how='all').dropna(how='all', axis=1) # 计算横向存在的重复模块数量(每组固定4列) module_count = cleaned_df.shape[1] // 4 # 定义统一的标准表头 standard_headers = ['姓名', '性别', '部门', '工资'] # 存储每个模块的处理后数据 module_data_list = [] # 遍历拆分每个横向模块 for i in range(module_count): # 截取当前模块的4列数据 col_start = i * 4 col_end = col_start + 4 module_df = cleaned_df.iloc[:, col_start:col_end] # 为模块设置统一表头 module_df.columns = standard_headers # 清理模块内的全空行 module_df = module_df.dropna(how='all') # 将处理后的模块数据加入列表 module_data_list.append(module_df) # 堆叠所有模块数据,生成最终规整表格 final_employee_df = pd.concat(module_data_list, ignore_index=True) # 输出结果并保存 print(final_employee_df) final_employee_df.to_excel('./规整员工信息表.xlsx', index=False)
关键步骤说明
- 空值清理:先清理全空行/列,避免拆分模块时引入无效空白列;每个模块内部再次清理全空行,过滤无数据的无效行。
- 模块拆分:利用每组固定4列的特性,通过循环按列索引截取模块数据,确保每个模块的字段对应一致。
- 堆叠合并:使用
pd.concat将所有模块数据纵向堆叠,ignore_index=True重置行索引,保证最终表格索引连续唯一。
内容的提问来源于stack exchange,提问作者Constantine Theodore
相关产品推荐
相关产品推荐

