如何用Python将复杂格式Excel转为简单格式?已试Pandas遇阻
用Python Pandas转换复杂格式Excel为指定简单格式
针对复杂格式Excel转简单格式的需求,结合Pandas和openpyxl就能解决合并单元格、多层表头这类常见瓶颈问题,以下是具体操作步骤:
1. 处理合并单元格(核心瓶颈解决)
复杂Excel里的合并单元格直接用Pandas读取会出现大量空值,必须先把合并区域的内容统一填充:
先安装依赖:
pip install pandas openpyxl
然后编写代码处理:
import pandas as pd from openpyxl import load_workbook # 加载原Excel文件 wb = load_workbook("你的原Excel文件路径.xlsx") ws = wb.active # 遍历所有合并单元格,将左上角单元格的值填充到整个合并区域 for merged_range in ws.merged_cells.ranges: top_left_val = ws[merged_range.min_row][merged_range.min_col - 1].value # 填充合并区域内的空值单元格 for row in ws[merged_range.min_row:merged_range.max_row + 1]: for cell in row[merged_range.min_col - 1:merged_range.max_col]: if cell.value is None: cell.value = top_left_val # 保存填充后的临时文件(方便排查问题,也可直接转成DataFrame) wb.save("填充合并单元格后的临时文件.xlsx") # 读取处理后的文件为DataFrame df = pd.read_excel("填充合并单元格后的临时文件.xlsx")
2. 清洗数据并重构目标格式
根据目标格式要求,提取所需列、过滤无关行(比如原表的标题行、汇总行),并重命名列:
# 过滤无项目名称的空行(根据你的实际列名调整) df_clean = df.dropna(subset=["原表项目名称列"]).reset_index(drop=True) # 选择需要的列,并重命名为目标格式的列名 target_df = df_clean[["原表类别列", "原表项目名称列", "原表数值列"]].rename( columns={ "原表类别列": "类别", "原表项目名称列": "项目名称", "原表数值列": "数值" } )
3. 导出为目标格式Excel
最后将处理好的数据导出,去掉默认索引:
target_df.to_excel("你的目标格式文件.xlsx", index=False)
常见问题解决提示
- 若原表是多层表头,读取时指定
header参数,比如pd.read_excel(..., header=[0,1]),之后再合并表头或提取所需层级。 - 原表的汇总行可通过布尔索引过滤,比如
df = df[df["原表类别列"] != "汇总"]。 - 遇到数值格式问题(如文本转数值),用
pd.to_numeric(target_df["数值"], errors="coerce")处理。
内容的提问来源于stack exchange,提问作者sourabh dev
相关产品推荐
相关产品推荐

