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

使用Python将Excel指定列值转为行值写入新文件的问题求助

问题根因

每次调用to_excel()方法默认会覆盖原有文件,所以你循环内的写入操作全部被后续写入覆盖,仅最后一次生效。该需求本质是宽表转长表,无需逐行循环写入,直接用pandas内置方法即可快速实现。

解决方法

方法一:先构造目标格式再一次性写入(推荐)

用melt方法把指定列从横向排列转为纵向堆叠,再一次性写入文件,执行效率远高于循环写入:

import pandas as pd

# 读取原始Excel文件
df = pd.read_excel("你的原始Excel文件路径.xlsx")

# 选择要提取的列,转为纵向堆叠格式,value_vars内按你需要的输出顺序填列名
target_df = df.melt(
    value_vars=["UNIQUE_ID", "SENDING_FACILITY"]
).drop(columns="variable")

# 写入目标文件
target_df.to_excel(
    "U:/IMAT/test3.xlsx",
    sheet_name="Sheet1",
    header=None,
    index=False,
    startcol=1
)

方法二:如果确实需要逐行写入

使用ExcelWriter对象复用文件句柄,避免每次写入覆盖原文件:

import pandas as pd

df = pd.read_excel("你的原始Excel文件路径.xlsx")
i = 0
with pd.ExcelWriter("U:/IMAT/test3.xlsx", engine="openpyxl") as writer:
    for index, row in df.iterrows():
        # 写入当前行UNIQUE_ID
        pd.DataFrame([row["UNIQUE_ID"]]).to_excel(
            writer,
            sheet_name="Sheet1",
            header=None,
            index=False,
            startcol=1,
            startrow=i
        )
        i += 1
        # 写入当前行SENDING_FACILITY
        pd.DataFrame([row["SENDING_FACILITY"]]).to_excel(
            writer,
            sheet_name="Sheet1",
            header=None,
            index=False,
            startcol=1,
            startrow=i
        )
        i += 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:15:01