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

Python按供应商拆分Excel文件效率低下,寻求优化方案

优化Excel按供应商拆分的高效实现

原代码的低效问题集中在重复IO操作、逐单元格写入和频繁保存几个关键节点,以下是针对性的优化方案:

核心优化点

  • 避免重复加载空白工作簿:仅加载一次模板,通过复制模板文件创建新文件
  • 替换逐单元格写入:用pandas批量写入接口替代手动循环赋值,大幅提升效率
  • 减少保存次数:所有数据写入完成后仅执行一次保存操作
  • 确保输出目录存在:自动创建指定的目标文件夹,避免路径错误

优化后代码

import os
import pandas as pd
from shutil import copyfile

# 定义输出目录并确保存在
output_dir = os.path.expanduser("~/Downloads/VendorSplittingApp")
os.makedirs(output_dir, exist_ok=True)

# 按供应商分组处理(比先取唯一值再筛选更高效)
for supplier, supplier_df in df.groupby('Vendor Name'):
    if not isinstance(supplier, str):
        continue
    # 处理文件名中的非法字符
    safe_supplier = supplier.replace('/', '_')
    output_path = os.path.join(output_dir, f"{safe_supplier}.xlsx")
    
    # 复制空白工作簿模板,避免修改原文件
    copyfile(blank_order_book_path, output_path)
    
    # 用pandas批量写入数据到指定工作表
    with pd.ExcelWriter(output_path, engine='openpyxl', mode='a', if_sheet_exists='replace') as writer:
        supplier_df.to_excel(writer, sheet_name="Data Dump", index=False)

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

优化细节说明

  1. 工作簿加载优化:原代码每次循环都重新读取磁盘加载空白工作簿,属于重复高开销IO操作。优化后通过复制模板文件创建新文件,仅在初始化时读取一次原模板。
  2. 数据写入优化:openpyxl逐单元格赋值是效率最低的写入方式,改用pandas的to_excel接口,底层会优化批量写入逻辑,处理大数据集时速度提升明显。
  3. 保存操作优化:原代码每写入一个单元格就执行一次保存,频繁触发磁盘写入。优化后仅在当前供应商的所有数据写入完成后保存一次,减少磁盘IO次数。
  4. 分组逻辑优化:使用df.groupby直接遍历分组,比先取唯一值再逐个筛选的逻辑更高效,pandas内部会对分组操作做性能优化。

内容的提问来源于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:25:18