में पांडा के साथ बड़े विलय पर मेमोरी एरर मैं outer
करने के लिए पांडा का उपयोग कर रहा हूं ~ 1000-2000 सीएसवी फाइलों के सेट पर विलय। प्रत्येक सीएसवी फ़ाइल में एक पहचानकर्ता कॉलम id
होता है जो सभी सीएसवी फाइलों के बीच साझा किया जाता है, लेकिन प्रत्येक फ़ाइल में 3-5 कॉलम के कॉलम का एक अनूठा सेट होता है। प्रत्येक फ़ाइल में लगभग 20,000 अद्वितीय id
पंक्तियां हैं। मैं बस इतना करना चाहता हूं कि सभी नए कॉलम एक साथ लाएं और मर्ज इंडेक्स के रूप में id
कॉलम का उपयोग करें।पाइथन
मैं यह एक साधारण merge
कॉल का उपयोग कर कार्य करें:
merged_df = first_df # first csv file dataframe
for next_filename in filenames:
# load up the next df
# ...
merged_df = merged_df.merge(next_df, on=["id"], how="outer")
समस्या यह है कि लगभग 2000 CSV फ़ाइलों के साथ, मैं merge
आपरेशन पांडा द्वारा फेंका में एक MemoryError
मिलता है। मुझे यकीन नहीं है कि मर्ज ऑपरेशन में किसी समस्या के कारण यह एक सीमा है?
अंतिम डेटाफ्रेम में 20,000 पंक्तियां और मोटे तौर पर (2000 x 3) = 6000 कॉलम होंगे। यह बड़ा है, लेकिन कंप्यूटर पर सभी मेमोरी का उपभोग करने के लिए पर्याप्त नहीं है जिसका उपयोग मैं कर रहा हूं जिसमें 20 जीबी रैम है। क्या यह आकार पांडा मैनिप्ल्यूशन के लिए बहुत अधिक है? क्या मुझे इसके बजाय स्क्लाइट की तरह कुछ उपयोग करना चाहिए? क्या इस पैमाने पर काम करने के लिए merge
ऑपरेशन में कुछ ऐसा बदल सकता है?
धन्यवाद।
स्मृति के रूप में, आप एक जनरल एक्सप्रेशन का उपयोग कर के बजाय होना चाहिए सूची समझ ... (हालांकि 'concat' के आंतरिक कार्यों के बारे में निश्चित नहीं है) – root
@ अच्छी तरह से, जनरेटर केवल बेहतर हो सकता है मुझे लगता है (सबसे खराब मामला यह सिर्फ एक सूची में परिवर्तित हो जाता है) :) –
@root अच्छा स्थान btw ! (टीबी मुझे नहीं पता था कि एक जनरेटर स्वीकार करेगा!) –