【发布时间】:2026-02-26 05:45:01
【问题描述】:
我有一个处理 DataFrame 的函数,主要用于将数据处理到存储桶中,使用 pd.get_dummies(df[col]) 在特定列中创建特征的二进制矩阵。
为了避免一次使用此函数处理我的所有数据(内存不足并导致 iPython 崩溃),我使用以下方法将大型 DataFrame 分成块:
chunks = (len(df) / 10000) + 1
df_list = np.array_split(df, chunks)
pd.get_dummies(df) 将根据df[col] 的内容自动创建新列,对于df_list 中的每个df,这些可能会有所不同。
处理后,我使用以下方法将 DataFrame 连接在一起:
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 6
chunk 0
2016-04-08 00:22:17.728849
chunk 1
2016-04-08 00:22:42.387693
chunk 2
2016-04-08 00:23:43.124381
chunk 3
2016-04-08 00:25:30.249369
chunk 4
2016-04-08 00:28:11.922305
chunk 5
2016-04-08 00:32:00.357365
有没有办法加快这个速度?我有 2900 个块要处理,因此感谢您的帮助!
接受 Python 中的任何其他建议!
【问题讨论】:
标签: python performance pandas concatenation processing-efficiency