我有一個處理DataFrame的函數,很大程度上是爲了將數據處理成存儲桶,並使用pd.get_dummies(df[col])
在特定列中創建了要素的二進制矩陣。爲什麼數據幀的連接速度會呈指數級下降?
chunks = (len(df)/10000) + 1
df_list = np.array_split(df, chunks)
pd.get_dummies(df)
會自動創建:
爲了避免處理所有使用該功能一次(這超出內存,並導致IPython的崩潰),我的數據,我已經用壞了的大數據幀成塊新列基於df[col]
的內容,這些可能會在df_list
中的每個df
有所不同。
處理後,我串接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 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中打開任何其他建議!
嗨@unutbu,感謝您的詳細解釋,這真的詳細解釋了理論! – jfive
用這種方法(43717,3261)連接2900個這種形狀的塊是否可行?處理步驟現在只需要10秒。 – jfive