我有一个处理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.
添加回答
举报
0/150
提交
取消