pandas 的 to_excel,在几十万条数据(也可能上百万)的情况下太慢了该怎么解决?

2021-03-31 20:47:03 +08:00
 lluuiq

有个需求是导出某个部门下的所有数据,以某个部门为例查询出来就有 60+W 条数据。
目前是后端查询出来给 pandas 、pandas 用 to_excel 方法生成 excel,最后传文件流给前端。
然后发现时间全耗在了 to_excel 这里,生成 40+M 大小的文件耗时 10 分钟左右。
有什么办法能优化到一两分钟以内吗

4168 次点击
所在节点    Python
19 条回复
superrichman
2021-03-31 20:53:07 +08:00
to_csv
noqwerty
2021-03-31 20:55:29 +08:00
先看看 csv 要多长时间,排除 io 的问题。如果 csv 没问题的话可以尝试换其他的 Excel writer engine,pandas 默认的好像很慢
renmu123
2021-03-31 20:55:51 +08:00
你导出成 CSV 应该会快很多,或者 to_dict 后用 openpyxl 的一个快速写入(具体不记得叫啥了)模式写入试试看吧。
如果数据不需要 pandas 处理,没必要用 pandas 来转换啊。
TimePPT
2021-03-31 21:02:52 +08:00
一般超过 10 万行就 csv 吧,你这存着费劲,接收方打开也费劲。
后来我还给运营培训过 sql,之后就开始导 sqlite db 文件给他们自己用了,随便用😂
wuwukai007
2021-03-31 21:19:09 +08:00
xlwings,如果不是逐行写的话,速度蛮快的,不过 40m 的一般电脑打开直接卡白屏吧
wuwukai007
2021-03-31 21:22:01 +08:00
还有 engine=xlwrite,我之前用过比 openpyxl 速度快 40%
左右
lluuiq
2021-03-31 21:24:49 +08:00
@renmu123 需要处理一些 转换格式 填充 nan 值之类的 。。
lluuiq
2021-03-31 21:25:57 +08:00
@noqwerty 尝试了一下 csv 写入 csv 速度特别快,但是返回文件时变慢了 😂
hs0000t
2021-03-31 21:50:08 +08:00
@lluuiq 导出后打压缩包再返回
lithiumii
2021-03-31 22:09:06 +08:00
都六十万条数据了,excel 不合适了吧,毕竟 excel 是给人看
Thymolblue
2021-03-31 22:10:28 +08:00
如果是 2D 数据的话可以考虑科学数据集(高于 3D 可能需要转换)
比如 hdf5
pandas 是能直接导出 hdf5 的
snw
2021-03-31 22:23:51 +08:00
如果中间不需要给人看,没必要经过 excel 格式,用 csv 就行。

Excel 本身处理几十万行、十几列的表格数据其实问题不大,只是 lz 的需求没必要。
neoblackcap
2021-03-31 22:59:26 +08:00
上百万的数据如果还要导出成 xlsx 格式,那么工作就会很有可能就会出现问题。原因是 xlsx 文件并不支持那么多数据。xlsx 最大行数为 2^20 = 1048576,你超过 100 万行的数据请考虑使用更加合适的工具,比如数据库
liprais
2021-03-31 23:00:02 +08:00
不给人看转成 csv 的你们是认真的么....转成二进制格式多好....
kkbblzq
2021-04-01 14:44:40 +08:00
别 excel 了,多了内存也会炸
rationa1cuzz
2021-04-01 16:36:09 +08:00
我好奇你生成后能顺利打开吗? 前几天还帮同学处理个雨量统计表 3M 多的 xlsx,一个大概十几秒
openpyxl engine=xlwrite 能快一点
HankLu
2021-04-01 23:34:17 +08:00
to_csv,10 万条我的联想小新 Air15 只要十秒左右
lluuiq
2021-04-02 09:44:33 +08:00
@rationa1cuzz 能打开 就是 40+M 的文件要加载个 10 秒左右
lluuiq
2021-04-02 09:47:21 +08:00
@HankLu 已经换成 csv 了,耗时从接近 10 分钟变成了几秒。。😂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/766997

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX