为了账号安全,请及时绑定邮箱和手机立即绑定

为什么DataFrame的级联速度会指数级地慢下来?

为什么DataFrame的级联速度会指数级地慢下来?

catspeake 2019-07-13 15:11:03
我有一个处理DataFrame的函数,主要用于将数据处理到存储桶中,在特定的列中创建一个二进制的特性矩阵。pd.get_dummies(df[col]).为了避免一次使用此函数(内存不足并导致IPython崩溃)处理所有数据,我使用以下方法将大型DataFrame分解为块:chunks = (len(df) / 10000) + 1df_list = np.array_split(df, chunks)pd.get_dummies(df)的内容自动创建新列。df[col]而且这两种方法可能各不相同。df在……里面df_list.处理后,我将DataFrames连接回一起,使用:for i, df_chunk in enumerate(df_list):     print "chunk", i    [x, y] = preprocess_data(df_chunk)     super_x = pd.concat([super_x, x], axis=0)     super_y = pd.concat([super_y, y], axis=0)     print datetime.datetime.utcnow()第一个块的处理时间是完全可以接受的,但是,每个块都会增长!这与preprocess_data(df_chunk)因为它没有理由增加。这是否是由于调用pd.concat()?请参阅下面的日志:chunks 6chunk 02016-04-08 00:22:17.728849chunk 12016-04-08 00:22:42.387693 chunk 22016-04-08 00:23:43.124381chunk  32016-04-08 00:25:30.249369chunk 42016-04-08 00:28:11.922305chunk 52016-04-08 00:32:00.357365有办法加快速度吗?我有2900块要处理,所以任何帮助都是非常感谢的!可以接受Python中的任何其他建议!
查看完整描述

2 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

每次连接时,都会返回数据的副本。

您希望保留块的列表,然后将所有内容连接起来作为最后一步。

df_x = []df_y = []for i, df_chunk in enumerate(df_list):
    print "chunk", i    [x, y] = preprocess_data(df_chunk)
    df_x.append(x)
    df_y.append(y)super_x = pd.concat(df_x, axis=0)del df_x  # Free-up memory.super_y = pd.concat(df_y, axis=0)del df_y  # Free-up memory.


查看完整回答
反对 回复 2019-07-13
  • 2 回答
  • 0 关注
  • 949 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信