【问题标题】:Xlwings takes a lot of time to write large datasets in ExcelXlwings 在 Excel 中编写大型数据集需要花费大量时间
【发布时间】:2022-01-15 16:32:44
【问题描述】:

我有一个具有 517 行13 列 的 pandas 数据框。我正在尝试使用 xlwings 将数据从 python 写入 Excel 表。 我的问题是 xlwings 将数据写入 excel 电子表格需要超过 35 分钟

ws.range("A2").options(header=False, index=False, chunksize=10000).value =qryPCPMonthlyDomainSpend

我还尝试将数据分批写入 200 行,但我发现它在前 400 行中写入数据非常快,之后需要永远写入剩余的数据。我怎样才能加快这个过程?

谢谢

【问题讨论】:

  • 此数据正在导入到包含宏的 Excel 工作表中。导入完成后,宏会创建一个数据透视表。因此,在这种情况下,使用传统的方法将数据写入excel表格将无法正常工作。
  • 这不是一个庞大的数据量,所以根本不应该花那么长时间。我对 xlwings 不太熟悉:工作表会同时尝试自动计算吗?

标签: python excel pandas xlwings


【解决方案1】:

我已经测试了使用pandas=1.3.5xlwings=0.25.3 将DataFrame (517 x 13) 写入Excel。大约需要 1 秒。

# project.py
import pandas as pd
import xlwings as xw

def insert_test_df(sheet, rows, columns):
    wb = xw.Book.caller()
    # Private pandas utility functions for testing
    pd._testing._N = rows
    pd._testing._K = columns
    df = pd._testing.makeDataFrame()
    wb.sheets[sheet].range("A1").value = df
    return df

上面是 Python 端的代码,下面是 Excel 端的 VBA 代码 (project.xlsm)。

Sub InsertLargeDataFrame()
    mymodule = Left(ThisWorkbook.name, (InStrRev(ThisWorkbook.name, ".", -1, vbTextCompare) - 1))
    RunPython "import " & mymodule & ";" & mymodule & ".insert_test_df('Sheet2', 517, 13)"
End Sub

我建议您将“原始”数据写入一张 Excel 工作表,然后在另一张工作表上进行其他转换。 我猜这应该可以避免 Excel 自动计算功能的任何干扰。

【讨论】:

    【解决方案2】:

    我还不能发表评论,所以我必须使用答案区域,但我每天都使用 xlwings 作为我的财务模型,我可以在几分之一秒内粘贴 5000 x 20。您确定粘贴是导致问题的原因吗?我会测试将数据粘贴到空白工作簿中,以便您消除任何奇怪的宏运行,或在粘贴时计算数据。 35 分钟让我相信,当粘贴数据并挂起进程时,某些东西正在计算数据。您还说它相对较快地写入前 400 个。也许最后的数据中有一些东西?您可以检查数据框并查看大小是多少,df.info()。也许它很大而你没有意识到?

    我用来粘贴我的 df 的只是你在做什么,df.value = rng。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 2020-05-17
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多