我尝试使用以下代码将多个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 exponentially slower?
我相信我已经正确地遵循了在连接之前使用列表的建议,但没有成功。有任何想法吗?谢谢。
答案 0 :(得分:0)
我发现你的熊猫代码没有任何问题;一个300mb的excel文件可能只是Pandas要处理的很多东西!以下是我采取的一些方法:
如果我是你,那么调试它的下一步就是将一些print(datetime.now())
语句放入循环中,看看它是读数,连接还是.to_excel
这需要时间。这样你就可以缩小问题的范围。还可以使用适合您的操作系统的工具查看您的内存使用情况。
Pandas针对科学计算进行了优化,它可能花费相当多的时间来组织数据以进行查询等。 ETL不是它的主要目的。如果你只需要连接一些表,(尽管我建议手动做一些事情很痛苦!)Excel本身的手动工作可能是最快的方法 - 微软高薪工程师的任务是优化。如果您需要一种程序化方法,可能值得尝试petl或讨论here之一的工具,它们可能采用比熊猫更简单/更有效的方法。
一些示例petl
代码可以解决这个问题:
import petl
petl.cat(*
petl.io.fromxlsx(file)
for file in ['your.xlsx', 'excel.xlsx', 'files.xlsx']
).progress().toxlsx()