有个需求是导出某个部门下的所有数据,以某个部门为例查询出来就有 60+W 条数据。
目前是后端查询出来给 pandas 、pandas 用 to_excel 方法生成 excel,最后传文件流给前端。
然后发现时间全耗在了 to_excel 这里,生成 40+M 大小的文件耗时 10 分钟左右。
有什么办法能优化到一两分钟以内吗
1
superrichman 2021-03-31 20:53:07 +08:00 via iPhone 2
to_csv
|
2
noqwerty 2021-03-31 20:55:29 +08:00 via Android
先看看 csv 要多长时间,排除 io 的问题。如果 csv 没问题的话可以尝试换其他的 Excel writer engine,pandas 默认的好像很慢
|
3
renmu123 2021-03-31 20:55:51 +08:00 via Android
你导出成 CSV 应该会快很多,或者 to_dict 后用 openpyxl 的一个快速写入(具体不记得叫啥了)模式写入试试看吧。
如果数据不需要 pandas 处理,没必要用 pandas 来转换啊。 |
4
TimePPT 2021-03-31 21:02:52 +08:00 via Android
一般超过 10 万行就 csv 吧,你这存着费劲,接收方打开也费劲。
后来我还给运营培训过 sql,之后就开始导 sqlite db 文件给他们自己用了,随便用😂 |
5
wuwukai007 2021-03-31 21:19:09 +08:00 via Android
xlwings,如果不是逐行写的话,速度蛮快的,不过 40m 的一般电脑打开直接卡白屏吧
|
6
wuwukai007 2021-03-31 21:22:01 +08:00 via Android
还有 engine=xlwrite,我之前用过比 openpyxl 速度快 40%
左右 |
10
lithiumii 2021-03-31 22:09:06 +08:00 via Android
都六十万条数据了,excel 不合适了吧,毕竟 excel 是给人看
|
11
Thymolblue 2021-03-31 22:10:28 +08:00
如果是 2D 数据的话可以考虑科学数据集(高于 3D 可能需要转换)
比如 hdf5 pandas 是能直接导出 hdf5 的 |
12
snw 2021-03-31 22:23:51 +08:00 via Android
如果中间不需要给人看,没必要经过 excel 格式,用 csv 就行。
Excel 本身处理几十万行、十几列的表格数据其实问题不大,只是 lz 的需求没必要。 |
13
neoblackcap 2021-03-31 22:59:26 +08:00
上百万的数据如果还要导出成 xlsx 格式,那么工作就会很有可能就会出现问题。原因是 xlsx 文件并不支持那么多数据。xlsx 最大行数为 2^20 = 1048576,你超过 100 万行的数据请考虑使用更加合适的工具,比如数据库
|
14
liprais 2021-03-31 23:00:02 +08:00 via iPhone
不给人看转成 csv 的你们是认真的么....转成二进制格式多好....
|
15
kkbblzq 2021-04-01 14:44:40 +08:00
别 excel 了,多了内存也会炸
|
16
rationa1cuzz 2021-04-01 16:36:09 +08:00
我好奇你生成后能顺利打开吗? 前几天还帮同学处理个雨量统计表 3M 多的 xlsx,一个大概十几秒
openpyxl engine=xlwrite 能快一点 |
17
HankLu 2021-04-01 23:34:17 +08:00
to_csv,10 万条我的联想小新 Air15 只要十秒左右
|
18
lluuiq OP @rationa1cuzz 能打开 就是 40+M 的文件要加载个 10 秒左右
|