复制文件1,按供应商拆分文件2,粘贴拆分数据到复制文件1
问题描述:
我需要根据“供应商名称”这一列中的唯一值,把一个Excel文件(File2
)拆分开来,并把每个部分保存为一个单独的文件,放在一个已经存在的Excel工作簿(File1
)里。不过,我现在的做法效率不高,花了很多时间。
File1的路径是blank_order_book_path
File2的数据框是df
代码主要部分:
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")
问题:
我现在的做法处理起来非常慢,特别是对于较大的数据集。我怀疑我的代码可能有些地方不够高效,但我不太确定具体是哪里。
背景:
我在用Python编程,使用了一些库,比如tkinter
、pandas
、os
、openpyxl
、shutil
和xlsxwriter
来进行文件操作和数据处理。我是在Windows环境下运行这段代码。
期望:
我希望这段代码能够高效地根据“供应商名称”来拆分Excel文件,并把每个部分保存到“Downloads/VendorSplittingApp”文件夹里。
1 个回答
看起来你只是想找出哪些地方比较耗费资源。我看到的两个最耗费资源的地方是(1)嵌套的列/行循环和(2)在最内层循环中写文件。
除非在每次最内层循环中写数据文件是绝对必要的(看起来你是按行写的?)……不如把写文件的操作移到和前面每行循环同一层级。
另外一个完全不同的选择是,你可以在运行Python代码之前,先用PowerQuery准备或整理你的数据。虽然我不知道你的数据是什么样的,但这可能值得考虑。
接下来,如果有可能把最内层循环拆开,那可能会有所帮助。看起来这个问题是你事先就知道列数的。除非列数非常多,把最内层循环拆成单独的代码行可能会有帮助。如果列数少但行数很多,效果可能会更明显。
虽然你代码中的其他操作看起来也可能比较耗费资源,但在列/行循环中的操作可能是最值得优先考虑的。
最后……作为一种完全不同的方法,你可以把数据转换成CSV格式,然后解析纯文本,而不是Excel对象。这显然意味着需要完全重写代码,但这也是一个选择。