使用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
相关产品推荐
相关产品推荐

