Python-为什么DataFrames的串联速度变慢?

Python-为什么DataFrames的串联速度变慢?,第1张

Python-为什么DataFrames的串联速度变慢?

不要调用

Dataframe.append
pd.concat一个for
循环中。这导致二次复制

pd.concat
返回一个新的
Dataframe
。必须为新的
Dataframe
分配空间,并且必须将旧Dataframe中的数据复制到新的Dataframe中。考虑以下行中所需的复制数量
for-loop
(假设每个副本的x大小为1):

super_x = pd.concat([super_x, x], axis=0)| iteration | size of old super_x | size of x | copying required ||         0 |        0 |         1 |     1 ||         1 |        1 |         1 |     2 ||         2 |        2 |         1 |     3 ||       ... |          ||       ||       N-1 |      N-1 |         1 |     N |

1 + 2 + 3 + ... + N = N(N+1)/2
。因此,
O(N**2)
需要一些副本才能完成循环。

现在考虑

super_x = []for i, df_chunk in enumerate(df_list):    [x, y] = preprocess_data(df_chunk)    super_x.append(x)super_x = pd.concat(super_x, axis=0)

追加到列表是一项O(1) *** 作,不需要复制。pd.concat循环完成后,现在只有一个调用。pd.concat由于super_x包含N 大小为1的Dataframe,因此对N的调用 需要进行N个拷贝。因此,以这种方式构造时,super_x需要O(N) 拷贝。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4953602.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存