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

pandas to_excel导出DataFrame时左上角单元格空白问题求助

问题:Pandas导出Excel时columns.name不显示,左上角单元格空白

将多个pandas Series合并为DataFrame后,使用to_excel方法写入已存在的xlsx文件时,遇到以下问题:

  • 终端打印DataFrame时,设置的columns.name(即"TITLE")正常显示
  • 导出到Excel文件后,左上角单元格始终空白,该标识内容对同工作表中保存多个表格的场景十分重要

使用的代码如下:

import pandas as pd

indexes = ['A', 'B', 'C', 'D']
num1 = [1, 2, 3, 4]
num2 = [5, 6, 7, 8]
num3 = [9, 10, 11, 12]
series1 = pd.Series(data=num1, index=indexes)
series2 = pd.Series(data=num2, index=indexes)
series3 = pd.Series(data=num3, index=indexes)
filename = "test.xlsx"
df = pd.DataFrame(
    {
        'foo': series1,
        'bar': series2,
        'baz': series3,
    }
)
print(df)
df.columns.name = "TITLE"
print(df)
with pd.ExcelWriter(filename, mode="a", engine="openpyxl", if_sheet_exists="overlay") as writer:
    df.to_excel(writer, sheet_name="Sheet", startrow=0, header=True)

原因分析

当使用mode="a"(追加模式)和if_sheet_exists="overlay"覆盖写入已有工作表时,to_excel方法默认关闭了单元格合并功能(merge_cells=False),而columns.name的显示依赖于左上角单元格的合并操作,因此导致该内容无法导出到Excel。

解决方案

修改to_excel的调用参数,显式设置merge_cells=True,同时确保使用支持追加操作的openpyxl引擎(已在代码中配置)。

修改后的代码如下:

import pandas as pd

indexes = ['A', 'B', 'C', 'D']
num1 = [1, 2, 3, 4]
num2 = [5, 6, 7, 8]
num3 = [9, 10, 11, 12]
series1 = pd.Series(data=num1, index=indexes)
series2 = pd.Series(data=num2, index=indexes)
series3 = pd.Series(data=num3, index=indexes)
filename = "test.xlsx"
df = pd.DataFrame(
    {
        'foo': series1,
        'bar': series2,
        'baz': series3,
    }
)
df.columns.name = "TITLE"

with pd.ExcelWriter(filename, mode="a", engine="openpyxl", if_sheet_exists="overlay") as writer:
    # 关键:添加merge_cells=True参数
    df.to_excel(writer, sheet_name="Sheet", startrow=0, header=True, merge_cells=True)

效果验证

运行修改后的代码后,Excel工作表的左上角单元格会正确显示设置的"TITLE",同时保留DataFrame的索引和列结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:06:12