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

如何使用Pandas向Excel指定列(a、c列)写入数据?

解决向Excel模板指定列插入数据的问题

我的模板文件my_template.xlsx结构如下:

a | b | c 
---------

我需要仅向其中的a列和c列插入数据,但当前代码会把数据插入到a列和b列,错误代码如下:

reports = reports.query(FSSP_MAIN).filter_by(id=id).all()
reports_df = pd.Dataframe(data=([report.id, report.surname] for report in reports), columns = ['a', 'c'])
excel_template = 'my_template.xlsx'
with pd.ExcelWriter(excel_template, if_sheet_exists="overlay", mode="a", engine="openpyxl") as writer:
    reports_df.to_excel(
        writer,
        start_row=1
        index=False,
        header =  False
    )

问题原因

pandas的to_excel方法默认会按DataFrame的列顺序,依次填充到Excel的连续列中。你的DataFrame只有a和c两列,所以会被自动填充到A、B列,而非目标的A、C列。另外注意原代码里pd.Dataframe是拼写错误,正确写法是pd.DataFrame,这个问题也需要修正。

两种解决方法

方法一:补全DataFrame列与模板匹配

给DataFrame添加空的b列,让列顺序和模板完全对应,这样写入时就会匹配到正确的Excel列:

reports = reports.query(FSSP_MAIN).filter_by(id=id).all()
# 补全b列,列顺序对应模板的a、b、c
reports_df = pd.DataFrame(
    data=([report.id, "", report.surname] for report in reports), 
    columns=['a', 'b', 'c']
)
excel_template = 'my_template.xlsx'
with pd.ExcelWriter(excel_template, if_sheet_exists="overlay", mode="a", engine="openpyxl") as writer:
    reports_df.to_excel(
        writer,
        start_row=1,
        index=False,
        header=False
    )

方法二:直接用openpyxl操作指定单元格

如果不想修改DataFrame结构,可以直接用openpyxl加载模板,手动指定单元格写入数据,灵活性更高:

from openpyxl import load_workbook

reports = reports.query(FSSP_MAIN).filter_by(id=id).all()
excel_template = 'my_template.xlsx'

# 加载模板文件
wb = load_workbook(excel_template)
ws = wb.active  # 操作默认工作表,如需指定表名可改为wb['你的工作表名称']

# 遍历数据写入指定列:A列对应a,C列对应c
for row_num, report in enumerate(reports, start=2):  # start=2对应Excel第2行(跳过表头行)
    ws.cell(row=row_num, column=1, value=report.id)  # column=1是A列
    ws.cell(row=row_num, column=3, value=report.surname)  # column=3是C列

# 保存修改
wb.save(excel_template)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:07:08