加快 Excel 文件与 Pandas 的串联速度

问题描述 投票:0回答:2

我正在尝试使用以下代码将多个 Excel 文件与 pandas 合并:

import pandas as pd
from os.path import basename


df = []
for f in ['test1.xlsx', 'test2.xlsx']:
    data = pd.read_excel(f, 'Sheet1')
    data.index = [basename(f)] * len(data)
    df.append(data)

df = pd.concat(df)

df.to_excel("merged_data2.xlsx")

这在测试文件上运行良好,但是当在其他 3 个大小超过 100mb 的 Excel 文件上尝试时,该过程变得太慢而无法使用。我看到了关于该主题的另一篇文章:Why does concatenation of DataFrames get指数慢?

我相信我在连接之前正确遵循了使用列表的建议,但没有成功。有什么想法吗?谢谢。

python excel performance pandas concatenation
2个回答
0
投票

我没有发现你的pandas代码有什么问题; 300mb 的 excel 文件对于 Pandas 来说可能太大了!以下是我会采取的一些方法:

策略1.调查

如果我是你,调试的下一步将是将一些

print(datetime.now())
语句放入循环中,看看是否是读取、连接或
.to_excel
花费了时间。这样您就可以缩小问题范围。另外,请使用适合您所在操作系统的适当工具来查看您的内存使用情况。

策略 2.尝试不同的工具

Pandas 针对科学计算进行了优化,它可能会花费大量时间来组织数据以进行查询等。 ETL 不是它的主要目的。如果您只需要连接几张工作表(尽管我建议手动执行某些操作,这让我很痛苦!),在 Excel 中手动工作可能是最快的方法 - 微软的高薪工程师一直负责优化它。如果您需要一种编程方法,可能值得尝试 petlhere 讨论的工具之一,它可能采用比 pandas 更简单/更有效的方法。

一些示例

petl
代码可能可以解决这个问题:

import petl
petl.cat(*
    petl.io.fromxlsx(file)
    for file in ['your.xlsx', 'excel.xlsx', 'files.xlsx']
).progress().toxlsx()

0
投票

这个问题已经开放很长时间了,但是,对于那些面临这个问题的人,我留下了我实现的一个项目的链接,该项目的重点是获得将 Excel 工作表转换为 Pandas 数据帧的性能。

查看项目这里

© www.soinside.com 2019 - 2024. All rights reserved.