मेरे पास एक ऐसा फ़ंक्शन है जो डेटाफ्रेम को संसाधित करता है, मुख्य रूप से बाल्टी में डेटा को संसाधित करने के लिए pd.get_dummies(df[col])
का उपयोग करके किसी विशेष कॉलम में सुविधाओं का बाइनरी मैट्रिक्स बनाता है।डेटाफ्रेम का सहभागिता तेजी से धीमा क्यों होता है?
chunks = (len(df)/10000) + 1
df_list = np.array_split(df, chunks)
pd.get_dummies(df)
स्वचालित रूप से पैदा करेगा:
एक ही बार में (जो स्मृति से बाहर चला जाता है और IPython के क्रैश होने का कारण बनता है) इस समारोह का उपयोग कर अपने डेटा के सभी प्रसंस्करण बचने के लिए, मैं का उपयोग कर टुकड़ों में बड़े DataFrame हड्डी टूट गई है 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 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
इस तेजी लाने के लिए एक समाधान है? मेरे पास प्रक्रिया करने के लिए 2 9 00 भाग हैं इसलिए किसी भी मदद की सराहना की जाती है!
पायथन में किसी अन्य सुझाव के लिए खोलें!
हाय @unutbu, विस्तृत स्पष्टीकरण के लिए धन्यवाद, यह वास्तव में सिद्धांत को विस्तार से समझाया! – jfive
क्या इस आकार के 2 9 00 ब्लॉक को जोड़ना संभव है, इस तरह (43717, 3261)? प्रसंस्करण चरण में केवल 10 सेकंड लगते हैं। – jfive