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

如何使用Pandas的parse函数处理Excel中的合并单元格?

处理带合并单元格的Excel转DataFrame问题

当Excel存在合并行/列时,pandas默认读取会出现NaN值和Unnamed列,核心原因是合并单元格仅在左上角保留有效值,其余位置为空,且表头解析逻辑不识别合并列的层级结构。以下是具体解决方法:

1. 依赖准备

先确保安装必要工具库:

pip install pandas openpyxl

2. 处理合并行(纵向单元格合并)

合并行的NaN是因为合并区域仅首行有值,其余行无数据。我们可以通过openpyxl获取合并单元格的范围,批量填充对应值:

import pandas as pd
from openpyxl import load_workbook

def fill_merged_rows(df, sheet):
    # 获取当前sheet所有合并单元格的范围
    merged_cells = sheet.merged_cells.ranges
    for merged_range in merged_cells:
        # 解析合并区域的起止行、列(Excel行/列从1开始)
        start_row, end_row = merged_range.min_row, merged_range.max_row
        start_col, end_col = merged_range.min_col, merged_range.max_col
        # 获取合并单元格的有效值(左上角单元格)
        fill_value = sheet.cell(row=start_row, column=start_col).value
        # 对应填充到DataFrame(DataFrame索引从0开始,需做偏移)
        df.iloc[start_row-2:end_row-1, start_col-1:end_col] = fill_value
    return df

# 读取Excel文件
wb = load_workbook('test.xlsx')
target_sheet = wb['Feuille 1']
df = pd.read_excel('test.xlsx', sheet_name='Feuille 1', header=0)

# 填充合并行的NaN值
df = fill_merged_rows(df, target_sheet)

3. 处理合并列(横向单元格合并)

Unnamed列是因为合并列的表头仅首列有值,其余列被pandas标记为Unnamed。我们可以通过读取Excel原始表头行,填充缺失的列名:

def fix_merged_columns(df, sheet):
    # 获取Excel表头行(假设表头在第1行,根据实际结构调整行号)
    header_cells = sheet[1]
    col_names = []
    current_header = None
    for cell in header_cells:
        # 遇到非空值则更新当前表头,否则沿用之前的表头
        if cell.value is not None:
            current_header = cell.value
        col_names.append(current_header)
    # 重新设置DataFrame的列名
    df.columns = col_names
    return df

# 修复合并列的Unnamed问题
df = fix_merged_columns(df, target_sheet)

4. 批量处理多个表格

如果文件包含大量sheet,可通过循环批量处理:

def batch_process_excel(file_path):
    wb = load_workbook(file_path)
    processed_dfs = []
    for sheet_name in wb.sheetnames:
        sheet = wb[sheet_name]
        df = pd.read_excel(file_path, sheet_name=sheet_name, header=0)
        # 依次处理合并行和合并列
        df = fill_merged_rows(df, sheet)
        df = fix_merged_columns(df, sheet)
        processed_dfs.append(df)
    return processed_dfs

# 批量处理所有sheet
all_processed_dfs = batch_process_excel('test.xlsx')

注意事项

  • 若表头不在第1行,需调整pd.read_excel的header参数,以及header_cells = sheet[X]中的X值
  • 遇到复杂嵌套合并(合并行+合并列交叉),需根据实际表格结构微调填充逻辑
  • 大数据量场景下,openpyxl的遍历效率足够支撑处理需求

内容的提问来源于stack exchange,提问作者RMB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:05:09