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

Python Excel优化:按供应商拆分数据写入指定工作表效率问题

问题描述

需要根据「Vendor Name」列的唯一值拆分Excel文件(File2,对应DataFrame为df),并将每个子集存入Excel工作簿(File1,路径为blank_order_book_path)的现有工作表「Data Dump」中,最终保存为单独文件到指定文件夹。具体步骤:

  • 按供应商拆分df
  • 为每个唯一供应商创建File1的副本
  • 将拆分后的数据粘贴到副本的「Data Dump」工作表
  • 将新文件保存到Downloads/VendorSplittingApp文件夹

当前实现效率极低,耗时久,偶尔还会运行异常。

核心代码
suppliers = df['Vendor Name'].unique()
for supplier in suppliers:
    if isinstance(supplier, str):
        safe_supplier = supplier.replace('/', '_')
        supplier_df = df[df['Vendor Name'] == supplier].copy()
        wb = load_workbook(blank_order_book_path)
        ws = wb["Data Dump"]
        data = supplier_df.columns.tolist() + supplier_df.values.tolist()
        for row_idx, row in enumerate(data, 1):
            for col_idx, value in enumerate(row, 1):
                ws.cell(row=row_idx, column=col_idx, value=value)
                wb.save(f"{safe_supplier}.xlsx")
print("All files saved to Downloads Folder")
现存问题
  • 处理耗时极久
  • 偶尔无法正常运行
优化方案

1. 核心优化思路

原代码效率低的根源是逐单元格写入+循环内重复保存,改成批量写入数据,调整保存时机,同时用更高效的分组逻辑处理供应商数据。

2. 优化后代码

import os
import pandas as pd
from openpyxl import load_workbook

# 创建目标文件夹,不存在则自动生成
target_folder = os.path.expanduser("~/Downloads/VendorSplittingApp")
os.makedirs(target_folder, exist_ok=True)

# 按供应商分组处理,替代循环筛选
for supplier, supplier_df in df.groupby('Vendor Name'):
    if not isinstance(supplier, str):
        continue
    # 处理供应商名称中的特殊字符,避免路径报错
    safe_supplier = supplier.replace('/', '_')
    save_path = os.path.join(target_folder, f"{safe_supplier}.xlsx")
    
    # 加载空白工作簿
    wb = load_workbook(blank_order_book_path)
    ws = wb["Data Dump"]
    
    # 清空Data Dump工作表原有数据(若空白工作簿有模板内容,可保留此步骤;无则删除)
    ws.delete_rows(1, ws.max_row)
    
    # 用pandas批量写入数据,直接覆盖到指定工作表
    supplier_df.to_excel(wb, sheet_name="Data Dump", index=False, startrow=0, startcol=0)
    
    # 所有数据写入完成后再保存,避免重复IO操作
    wb.save(save_path)

print(f"所有文件已保存到 {target_folder}")

3. 优化点说明

  • groupby分组:比循环逐个筛选供应商更高效,减少DataFrame切片的性能开销
  • 批量写入:利用pandas的to_excel批量写入逻辑,速度远快于逐单元格赋值
  • 调整保存时机:仅在所有数据写入完成后保存一次,避免循环内重复触发文件IO
  • 文件夹预创建:用os.makedirs确保目标路径存在,避免因文件夹缺失导致运行异常

内容的提问来源于stack exchange,提问作者HP's PPTs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:35:13