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

338 天前
 Lynnnn

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

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

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

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

——————

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

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

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

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

所以思路是调整工具?变更代码处理逻辑?
cvbnt
338 天前
chatgpt 问一下?
TimePPT
338 天前
如果只涉及统计 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
338 天前
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html

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

SQLite 就在本地,也不需要什么数据库权限和 it 小伙伴支援。
a1b2c3T
338 天前
用 emeditor 试试,
a302800411
338 天前
不需要 pandas 库合并成一个 excel

直接几千万行数据全读取到内存里,然后直接用 Python 完成你要的数据分析就行了
beyondstars
338 天前
1. 把每个小表格文件自己转成 csv 格式,或者让运维给你 csv 格式的,文件名编好顺序,例如 1.csv, 2.csv, ..., N.csv ;
2. 把每个文件的第一行去掉,但是要留一份出来单独保存,例如 head.csv;
3. 确保每个 csv 文件的最后一个字符一定是有且仅有一个换行符,然后按顺序合并下列文件 head.csv, 1.csv, ..., N.csv;
CaptainD
338 天前
pandas 理论上几千万数据没问题的,除非你的机器性能不太行或者你得 excel 列太多或者你代码有问题,可以把代码或者数据实例发上来看看,我经常用 pandas 做数分,几千万数据,十几列或者更多,都没问题,32g 内存足以
noparking188
338 天前
试试直接 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