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