You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:23:32