将数据框写入.xlsx文件速度过慢。

10

我有一个40MB的数据框'dfScore',我要将其写入.xlsx文件中。 enter image description here 以下是代码:

writer = pandas.ExcelWriter('test.xlsx', engine='xlsxwriter')
dfScore.to_excel(writer,sheet_name='Sheet1')
writer.save()

代码 dfScore.to_excel 运行时间接近一小时,the code writer.save() 又需要一个小时。这正常吗?有没有好的方法可以在不到10分钟内完成?

我已经在stackoverflow上搜索过了,但似乎一些建议对我的问题无效。


您的数据框大小为4百万行5列。尝试写入CSV并比较时间。 - Merlin
现代的Excel电子表格只能处理1,048,576行。 - Paul H
它不是太慢,而是卡住了。它已经死了。你正在写入比Excel能处理的更多行。这会导致Excel编写器默默地无限等待奇迹的出现,但这永远不会发生。要么将您的数据框拆分成几个部分并将它们作为单独的工作表进行编写,要么使用另一种格式(例如CSV),或者使用某些统计工具压缩您的数据框以使其适合Excel。 - Kartik
在8GB的MacBook Air上,将200万条记录读写到Excel大约需要20分钟,而仅需49秒即可写入CSV文件,19秒即可读取CSV文件。请按照答案中所述使用Excel。 - anmolmore
2个回答

7

为什么不将它保存为 .csv 文件呢?我曾经在个人电脑上处理过更大的数据框,写入 xlsx 时也遇到了同样的问题。

your_dataframe.to_csv('my_file.csv',encoding='utf-8',columns=list_of_dataframe_columns)

然后,您可以使用微软Excel或在线转换工具将其简单地转换为.xlsx格式。

1
我一直注意到同样的缓慢问题,并通过以下方式解决 - 先保存为csv文件,然后在Excel中打开并重新保存为xlsx格式。用这种方法处理要快得多。不幸的是,我不知道原因。 - tim654321
我无法在我的情况下这样做,因为有两列是用阿拉伯语书写的... CSV文件中的阿拉伯语无法正确打开。 - Rahul Pandey

0
代码 dfScore.to_excel 大约需要一个小时,代码 writer.save() 又需要一个小时。这正常吗?
听起来有点太高了。我运行了一个 XlsxWriter 测试,写入了 100 万行 x 5 列,花费了大约 100 秒。时间会根据测试机器的 CPU 和内存而变化,但花费 1 小时要慢 36 倍,似乎不太对。
请注意,Excel 和 XlsxWriter 只支持每个工作表的 1,048,576 行,因此您实际上正在丢弃 3/4 的数据并浪费时间。
有没有一种好的方法可以在不到 10 分钟内完成?
对于纯 XlsxWriter 程序,pypy 可以加快速度。例如,使用 pypy 重新运行我的 1,000,000 行 x 5 列测试用例,时间从 99.15 秒缩短到 16.49 秒。不过我不知道 Pandas 是否适用于 pypy。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接