如何使用pandas编辑Excel原文件而非生成仅含处理列的新文件
解决方案
方案1:全量读取修改后回写(适合文件体积<100M的场景,操作最简单)
你当前只读取了AT、AU两列到DataFrame,导出时自然只会保留这两列。要保留原文件其他内容,先读取完整Excel文件,修改指定列后全量写回即可,操作前务必备份原文件,避免数据丢失。
import pandas as pd # 读取完整Excel文件 df = pd.read_excel("datas2.xlsx") # 向量化操作替换循环,效率远高于手动遍历,同时修正原代码iloc的用法错误(iloc是属性用[]访问,不是函数用()) # 逻辑和你原代码一致:从第3行(Excel行号)开始判断AU列的值,修改AT列 au_col_idx = df.columns.get_loc("AU") mask = df.iloc[2:, au_col_idx] != 0 df.loc[mask[mask].index, "AT"] = "D2" df.loc[mask[~mask].index, "AT"] = "D3" # 写回原文件,index=False避免导出额外的索引列 df.to_excel("datas2.xlsx", index=False)
方案2:openpyxl直接修改指定列(适合大文件,无需加载全表到内存)
如果文件体积过大,全量读取内存不足,可以用openpyxl直接操作指定列的单元格,不影响其他内容:
from openpyxl import load_workbook from openpyxl.utils import column_index_from_string wb = load_workbook("datas2.xlsx") # 如果要修改指定工作表,替换为ws = wb["你的工作表名称"] ws = wb.active # 转换列名对应的列号:AT=46,AU=47 at_col = column_index_from_string("AT") au_col = column_index_from_string("AU") # 从Excel第3行开始遍历,和原代码逻辑一致 for row in range(3, ws.max_row + 1): au_value = ws.cell(row=row, column=au_col).value target_value = "D2" if au_value != 0 else "D3" ws.cell(row=row, column=at_col, value=target_value) # 保存修改 wb.save("datas2.xlsx")
内容的提问来源于stack exchange,提问作者Inv4sion
相关产品推荐
相关产品推荐

