请问有 1000W+行的数据(excel 表格),如何合并处理?

2024-01-19 10:55:03 +08:00
 Lynnnn

请教下 V 友,我请 IT 后台帮忙拉出大概 1300W 行左右的数据,分了 20 几个 excel 表给给我,1 个文件约 60-70W 行。 需求是想从这些数据里面提取需要是数据,然后做一些透视汇总什么的。

之前想的处理逻辑是:(1)先 pandas 合并所有表格(2)数据处理后导出。

碰到的问题是:pandas 处理不了这么大量是数据,多个文件合并卡死了。经过网上搜索一翻,装了 modin ,目前试验下来 3,4 个文件一合并不会报错,但是再多了也不行。

想请问 V 友还有没有更合适的工具?最好也是支持 pandas 语法的。

——————

P.S.我没有连后台数据库的权限(给了也不会,不懂数据库),也不方便请 IT 做预处理再导给我。 是不是只能考虑单个文件处理,然后再逐一合并结果了?但是有一些处理逻辑是需要几张汇总起来后才能写判断的。

3422 次点击
所在节点    Python
35 条回复
liprais
2024-01-19 10:58:00 +08:00
自己整到 sqlite 里面写 sql 完事
lcy630409
2024-01-19 10:58:29 +08:00
自己本机装个 mysql ,建表,然后 Navicat 导入 excel ,再从 mysql 中提取数据
你的需求不是 excel 能搞定的
h157
2024-01-19 10:58:40 +08:00
这数据量,用 vba 多表汇总试试
zh584728
2024-01-19 11:15:07 +08:00
直接 pandas.concat 合并不行吗,百万级别的数据我都合并过,当然我是在服务器上合并的
vvhy
2024-01-19 11:17:22 +08:00
excel 表格最多 1048576 行
Moeblack
2024-01-19 11:18:38 +08:00
我最近弄了一个 1000w 行的数据(Gelbooru metainfo ) csv 文件,用 sqlite 弄的
suibianwanwan
2024-01-19 11:19:43 +08:00
如果你电脑配置不错, 1300w 行, 一个 excel 就可以导出来了, 分 13 个 sheet, 每个 sheet100w 行
就是打开有点费劲, 毕竟文件太大了
Alias4ck
2024-01-19 11:20:41 +08:00
polars
Worldispow
2024-01-19 11:23:53 +08:00
合并不了,excel 最大行是 1048576 ,即便显示合并成功,excel 也会显示不全。
我一般是直接导出 csv 文件,然后再放到 oracle 里面分析。
需要做图啥的话用 Tableau 、帆软之类的 bi 软件。
Worldispow
2024-01-19 11:24:56 +08:00
如果你想用 pandas 分析,可以让运维导出 csv 格式,csv 没问题。
Horance
2024-01-19 11:50:00 +08:00
可以看下这个 https://mp.weixin.qq.com/s/BARSLv1Ua4hxdsZRntCnQg ,我曾经合并过几百万个 csv 文件差不多 1 0000 0000 条数据也可以在 1 个小时内完成,当然和列数有关,具体看你数据复杂度。
Lynnnn
2024-01-19 11:58:50 +08:00
感谢各位 V 友回复,我可能没表达清楚。
目前 1000W 数据是已经导出成 excel 表格,分了 20 多个文件,每个文件 1 个 sheet 。这些就是我的数据源了。后面所有处理都是基于这个。

然后最后我需要的结果,处理完完成导出的文件是非常小的,就 1 个 excel 的行数就能容纳,并不是导出结果也是 1000W 的行数据,这里补充说明一下。

我目前的问题是:处理过程中,合并 1000W 行数据报错,本地电脑发现上了 modin 也不行。

所以思路是调整工具?变更代码处理逻辑?
cvbnt
2024-01-19 12:13:44 +08:00
chatgpt 问一下?
TimePPT
2024-01-19 12:22:18 +08:00
如果只涉及统计 excel 行数,这事就简单了。

不上代码了,直接说思路,python+pandas 方便很多

待处理 excel 放一个文件夹

使用 pandas 创建一个 dataframe ,列名:excel 文件名,行数,(有必要的话可以列数,甚至可以列名拿出来)

标准库 pathlib 拿到所有 xls/xlsx 文件 path
循环遍历这些 path
with Path.open as f 读取文件
读取 excel 内容到 pandas 的 dataframe
获取文件名,行数,并记录到开头新建的 dataframe 里

循环遍历完后,df.to_excel 导出统计文件
Betsy
2024-01-19 12:49:53 +08:00
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html

基于上述的代码将 Excel 导入到 SQLite ,然后按照你熟悉的方式操作 DataFrame 。

SQLite 就在本地,也不需要什么数据库权限和 it 小伙伴支援。
a1b2c3T
2024-01-19 12:55:34 +08:00
用 emeditor 试试,
a302800411
2024-01-19 13:01:12 +08:00
不需要 pandas 库合并成一个 excel

直接几千万行数据全读取到内存里,然后直接用 Python 完成你要的数据分析就行了
beyondstars
2024-01-19 13:05:17 +08:00
1. 把每个小表格文件自己转成 csv 格式,或者让运维给你 csv 格式的,文件名编好顺序,例如 1.csv, 2.csv, ..., N.csv ;
2. 把每个文件的第一行去掉,但是要留一份出来单独保存,例如 head.csv;
3. 确保每个 csv 文件的最后一个字符一定是有且仅有一个换行符,然后按顺序合并下列文件 head.csv, 1.csv, ..., N.csv;
CaptainD
2024-01-19 13:54:52 +08:00
pandas 理论上几千万数据没问题的,除非你的机器性能不太行或者你得 excel 列太多或者你代码有问题,可以把代码或者数据实例发上来看看,我经常用 pandas 做数分,几千万数据,十几列或者更多,都没问题,32g 内存足以
noparking188
2024-01-19 14:08:27 +08:00
试试直接 PySpark 单机跑,API 接口和 pandas 差不多,记得用 3.3 及以上版本的,可以直接读批量 Excel

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

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

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

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

© 2021 V2EX