pandas 处理数据慢,求好方法

2019-08-14 15:59:42 +08:00
 zky001

各位大佬,我有一个文本,里面有 54 万行数据,其中一列数据是类似 1234,2345,3122,3442 这样的一个字符串,我要把这列数据分割成四列数据,用 split 分割着四列在加一个 pandas dataframe 实现,每次跑半个多小时到一个多小时程序就 down 掉了,有啥好的思路方法完成这样的需求吗?

5067 次点击
所在节点    Python
30 条回复
zky001
2019-08-14 16:00:46 +08:00
想过把这些数据导入数据库处理,但是类似 1234,2345,3122,3442 的数据找不到一个好的对应的数据格式
liprais
2019-08-14 16:02:13 +08:00
spark 处理完了写进数据库
Vanderick
2019-08-14 16:23:04 +08:00
read 的时候用 chunksize,此时 df 本质是生成器,然后去迭代读;另外 pandas 有 str.split()内置方法
ipwx
2019-08-14 16:23:30 +08:00
遇事不决,上 C++。
----

讲道理你这 54 万行而已,Python for line 都能解决,为啥一定要 pandas dataframe。
zky001
2019-08-14 16:46:58 +08:00
@ipwx 主要是时间太长了,c++时间也没减下来
ipwx
2019-08-14 16:50:01 +08:00
@zky001 这样的话我觉得你程序哪里肯定写的不太好。

首先一点可以明确的就是,别的任何其他方案能做到的,C++ 一定也能做到。
----

54 万行真的不多,C++ 的话不要用 iostream/fstream,用 fopen/fscanf 甚至是 open/read 然后手工解析。

肯定能优化好的。
Darcy90
2019-08-14 16:50:15 +08:00
可以试试 dask,话说 54 万行用 apply 不至于这么慢吧
upczww
2019-08-14 16:57:51 +08:00
Python for 循环绝对要不了那么久,碰巧我刚才处理了一个 200 多万行的文本文件,为什么一分钟不到就处理完了。
joson1205
2019-08-14 17:00:15 +08:00
肯定是代码算法逻辑有问题,不可能那么久
dongxiao
2019-08-14 17:00:20 +08:00
import pandas as pd
data = pd.DataFrame(["1234, 2341, 3412, 3123"]*10, columns=["just_a_column"])
ret = data.just_a_column.str.split(", ", expand=True)
Jafee
2019-08-14 17:00:31 +08:00
54 万行不多,跑那么久不太应该,可以看看优化一下代码。
arrow8899
2019-08-14 17:01:14 +08:00
一行大概多长啊? 再发下代码吧。我本地生成了 100W 行数据,split 然后写入另外一个文件,10 秒钟就完事
bugcoder
2019-08-14 17:01:41 +08:00
pandas 0.25 的 explode 了解一下
upczww
2019-08-14 17:03:11 +08:00
楼主可以发一行数据出来看看
qianc1990
2019-08-14 17:07:13 +08:00
pd.read_csv('file_name', sep=','), 这样不就可以了吗...
hjq98765
2019-08-14 18:09:52 +08:00
放代码上来,我猜是你不断地 df.append(df)了,pandas 每次生成一个新 df 都会巨慢无比,但是 54w 行也就算个毛毛雨
zilaijuan
2019-08-14 18:23:07 +08:00
dataframe 的 map 方法,试一下
MMMMMMMMMMMMMMMM
2019-08-14 20:46:02 +08:00
用 gpu 跑

N 卡有 cuda,A 卡不太清楚
lulu00147
2019-08-14 22:11:49 +08:00
Emeditor 正则表达式 了解一下
AX5N
2019-08-15 00:26:14 +08:00
肯定是你的程序逻辑有问题,你是不是实际上遍历了 54w*54w 次...

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

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

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

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

© 2021 V2EX