请教下 V 友,我请 IT 后台帮忙拉出大概 1300W 行左右的数据,分了 20 几个 excel 表给给我,1 个文件约 60-70W 行。 需求是想从这些数据里面提取需要是数据,然后做一些透视汇总什么的。
之前想的处理逻辑是:(1)先 pandas 合并所有表格(2)数据处理后导出。
碰到的问题是:pandas 处理不了这么大量是数据,多个文件合并卡死了。经过网上搜索一翻,装了 modin ,目前试验下来 3,4 个文件一合并不会报错,但是再多了也不行。
想请问 V 友还有没有更合适的工具?最好也是支持 pandas 语法的。
——————
P.S.我没有连后台数据库的权限(给了也不会,不懂数据库),也不方便请 IT 做预处理再导给我。 是不是只能考虑单个文件处理,然后再逐一合并结果了?但是有一些处理逻辑是需要几张汇总起来后才能写判断的。
1
liprais 299 天前
自己整到 sqlite 里面写 sql 完事
|
2
lcy630409 299 天前
自己本机装个 mysql ,建表,然后 Navicat 导入 excel ,再从 mysql 中提取数据
你的需求不是 excel 能搞定的 |
3
h157 299 天前
这数据量,用 vba 多表汇总试试
|
4
zh584728 299 天前
|
5
vvhy 299 天前
excel 表格最多 1048576 行
|
6
Moeblack 299 天前
我最近弄了一个 1000w 行的数据(Gelbooru metainfo ) csv 文件,用 sqlite 弄的
|
7
suibianwanwan 299 天前
如果你电脑配置不错, 1300w 行, 一个 excel 就可以导出来了, 分 13 个 sheet, 每个 sheet100w 行
就是打开有点费劲, 毕竟文件太大了 |
8
Alias4ck 299 天前
polars
|
9
Worldispow 299 天前
合并不了,excel 最大行是 1048576 ,即便显示合并成功,excel 也会显示不全。
我一般是直接导出 csv 文件,然后再放到 oracle 里面分析。 需要做图啥的话用 Tableau 、帆软之类的 bi 软件。 |
10
Worldispow 299 天前
如果你想用 pandas 分析,可以让运维导出 csv 格式,csv 没问题。
|
11
Horance 299 天前
可以看下这个 https://mp.weixin.qq.com/s/BARSLv1Ua4hxdsZRntCnQg ,我曾经合并过几百万个 csv 文件差不多 1 0000 0000 条数据也可以在 1 个小时内完成,当然和列数有关,具体看你数据复杂度。
|
12
Lynnnn OP 感谢各位 V 友回复,我可能没表达清楚。
目前 1000W 数据是已经导出成 excel 表格,分了 20 多个文件,每个文件 1 个 sheet 。这些就是我的数据源了。后面所有处理都是基于这个。 然后最后我需要的结果,处理完完成导出的文件是非常小的,就 1 个 excel 的行数就能容纳,并不是导出结果也是 1000W 的行数据,这里补充说明一下。 我目前的问题是:处理过程中,合并 1000W 行数据报错,本地电脑发现上了 modin 也不行。 所以思路是调整工具?变更代码处理逻辑? |
13
cvbnt 299 天前 via Android
chatgpt 问一下?
|
14
TimePPT 299 天前
如果只涉及统计 excel 行数,这事就简单了。
不上代码了,直接说思路,python+pandas 方便很多 待处理 excel 放一个文件夹 使用 pandas 创建一个 dataframe ,列名:excel 文件名,行数,(有必要的话可以列数,甚至可以列名拿出来) 标准库 pathlib 拿到所有 xls/xlsx 文件 path 循环遍历这些 path with Path.open as f 读取文件 读取 excel 内容到 pandas 的 dataframe 获取文件名,行数,并记录到开头新建的 dataframe 里 循环遍历完后,df.to_excel 导出统计文件 |
15
Betsy 299 天前 via iPhone
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html
基于上述的代码将 Excel 导入到 SQLite ,然后按照你熟悉的方式操作 DataFrame 。 SQLite 就在本地,也不需要什么数据库权限和 it 小伙伴支援。 |
16
a1b2c3T 299 天前 via iPhone
用 emeditor 试试,
|
17
a302800411 299 天前 via iPhone
不需要 pandas 库合并成一个 excel
直接几千万行数据全读取到内存里,然后直接用 Python 完成你要的数据分析就行了 |
18
beyondstars 299 天前
1. 把每个小表格文件自己转成 csv 格式,或者让运维给你 csv 格式的,文件名编好顺序,例如 1.csv, 2.csv, ..., N.csv ;
2. 把每个文件的第一行去掉,但是要留一份出来单独保存,例如 head.csv; 3. 确保每个 csv 文件的最后一个字符一定是有且仅有一个换行符,然后按顺序合并下列文件 head.csv, 1.csv, ..., N.csv; |
19
CaptainD 299 天前
pandas 理论上几千万数据没问题的,除非你的机器性能不太行或者你得 excel 列太多或者你代码有问题,可以把代码或者数据实例发上来看看,我经常用 pandas 做数分,几千万数据,十几列或者更多,都没问题,32g 内存足以
|
20
noparking188 299 天前
试试直接 PySpark 单机跑,API 接口和 pandas 差不多,记得用 3.3 及以上版本的,可以直接读批量 Excel
|
21
sunmker 299 天前
让 it 导出 csv 的数据,1300w 行,再用 pandas 导入处理
|
22
Battle 299 天前
grep sed awk
|
23
ohayoo 299 天前
pandas 处理应该是没问题的,我曾经甚至用 pandas 处理过 nginx 日志分析,日志以亿条为单位都没问题,用 chunksize ,分段读取,避免内存吃不消
|
24
deweixu 298 天前
导出 csv ,cat awk sed grep ,,,哈哈哈哈哈
|
25
ntedshen 298 天前
xlsx 这玩意感觉三方读取普遍有问题,数值还行主要是那个 sharedStrings.xml 的字典,之前用 java 导出一份两百多万行的用户数据的时候用了 70g 内存。。。
要么转 csv 或者 json 处理要么给个巨大内存的机器让他自己龟爬。。。 |
26
djangovcps 298 天前
报什么错? OOM 内存溢出? 自己写分块处理逻辑吧,不行就存 mysql 里;
|
27
iv8d 298 天前
导入数据库,处理完了再导出为 excel
|
28
ktyang 298 天前
换个格式。。。
|
29
Lynnnn OP 谢谢各位回复,源数据我先转成 csv ,准备先试试下面 3 种方案:
(1)导入数据库 mysql/sqlite (2)换 polars (3)换 PySpark (4)控制内存 合并成 1 个文件只在 python 数据处理过程中,会要在 jupyter 里面预览一下效果,不导出。等全部处理完导出的只是一个比较小的文件。 应该是上面几楼说的内存的问题,普通办公人员电脑配置不太行,但用 PowerBI 更卡... 不过数据库和内存控制都没搞过,我先研究一下再反馈。 再次谢谢! |
30
akira 298 天前
excel 不支持 1000W 行的数据。别往这个方向浪费精力。 直接代码处理吧
|
31
troywinter 298 天前
vaex https://vaex.io/
|
32
z1829909 298 天前
把 excel 都读取一遍, 写入到自己电脑搭建的数据库, 然后直接 sql 处理. 如果不会的话可以学学, 成本不算太高
|
33
aec4d 298 天前
duckdb or clickhouse
|
34
i690531336 261 天前
放数据库操作就比较方便
|
35
vincentqiao 196 天前 via iPhone
最近也碰到这个问题,发现不管是 pandas 还是 polars ,读取大型.xlsx 文件都很吃力。
最好的解决办法还是 csv 。pandas 或者 polars 都很快 |