मैं पहले से ही प्रदान किए जाने वाले अधिकांश संभावित समाधानों के आधार पर अधिक व्यापक उत्तर देना चाहता हूं। मैं एक और संभावित सहायता को इंगित करना चाहता हूं जो पढ़ने की प्रक्रिया में मदद कर सकती है।
विकल्प 1: dtypes
"dtypes" एक बहुत शक्तिशाली पैरामीटर है जिसका उपयोग आप read
तरीकों के मेमोरी प्रेशर को कम करने के लिए कर सकते हैं । यह और यह देखें जवाब को । पंडों, डिफ़ॉल्ट रूप से, डेटा के dtypes अनुमान लगाने की कोशिश करते हैं।
डेटा संरचनाओं का उल्लेख करते हुए, संग्रहीत प्रत्येक डेटा, एक मेमोरी आवंटन होता है। बुनियादी स्तर पर नीचे दिए गए मानों को देखें (नीचे दी गई तालिका C प्रोग्रामिंग भाषा के लिए मूल्यों को दर्शाती है):
The maximum value of UNSIGNED CHAR = 255
The minimum value of SHORT INT = -32768
The maximum value of SHORT INT = 32767
The minimum value of INT = -2147483648
The maximum value of INT = 2147483647
The minimum value of CHAR = -128
The maximum value of CHAR = 127
The minimum value of LONG = -9223372036854775808
The maximum value of LONG = 9223372036854775807
का संदर्भ लें इसNumPy और C प्रकारों के बीच मिलान देखने के पृष्ठ का ।
मान लीजिए कि आपके पास अंकों के पूर्णांकों की एक सरणी है । आप सैद्धांतिक रूप से और व्यावहारिक रूप से असाइन कर सकते हैं, 16-बिट पूर्णांक प्रकार की सरणी कह सकते हैं, लेकिन फिर आप उस मेमोरी को संग्रहीत करने की आवश्यकता से अधिक मेमोरी आवंटित करेंगे। इसे रोकने के लिए, आप dtype
विकल्प पर सेट कर सकते हैं read_csv
। आप सरणी आइटम को लंबे पूर्णांक के रूप में संग्रहीत नहीं करना चाहते हैं जहां वास्तव में आप उन्हें 8-बिट पूर्णांक ( np.int8
या np.uint8
) के साथ फिट कर सकते हैं ।
निम्नलिखित dtype मानचित्र का निरीक्षण करें।
स्रोत: https://pbpython.com/pandas_dtypes.html
आप dtype
पंडों के तरीकों पर एक पैरामीटर के रूप में पैरामीटर को read
{कॉलम: प्रकार} जैसे पर पारित कर सकते हैं ।
import numpy as np
import pandas as pd
df_dtype = {
"column_1": int,
"column_2": str,
"column_3": np.int16,
"column_4": np.uint8,
...
"column_n": np.float32
}
df = pd.read_csv('path/to/file', dtype=df_dtype)
विकल्प 2: विखंडू द्वारा पढ़ें
चंक्स में डेटा को पढ़ने से आप इन-मेमोरी में डेटा का एक हिस्सा एक्सेस कर सकते हैं, और आप अपने डेटा पर प्रीप्रोसेसिंग कर सकते हैं और कच्चे डेटा के बजाय प्रोसेस्ड डेटा को संरक्षित कर सकते हैं। यह बेहतर होगा यदि आप इस विकल्प को पहले एक, dtypes के साथ जोड़ दें ।
मैं उस प्रक्रिया के लिए पांडा कुकबुक सेक्शन को इंगित करना चाहता हूं, जहां आप इसे यहां पा सकते हैं । उन दो वर्गों पर ध्यान दें;
विकल्प 3: Dask
Dask एक ढाँचा है जिसे Dask की वेबसाइट में इस प्रकार परिभाषित किया गया है :
Dask एनालिटिक्स के लिए उन्नत समानता प्रदान करता है, जो आपके द्वारा पसंद किए जाने वाले उपकरणों के लिए बड़े पैमाने पर प्रदर्शन को सक्षम करता है
यह उन जरूरी हिस्सों को ढंकने के लिए पैदा हुआ था, जहां पांडा नहीं पहुंच सकते। Dask एक शक्तिशाली ढांचा है जो आपको वितरित तरीके से संसाधित करके बहुत अधिक डेटा एक्सेस की अनुमति देता है।
आप अपने डेटा को पहले से तैयार करने के लिए डैस्क का उपयोग कर सकते हैं, डैस्क चैंकिंग वाले हिस्से की देखभाल करता है, इसलिए पांडा के विपरीत आप बस अपने प्रोसेसिंग स्टेप्स को परिभाषित कर सकते हैं और डैस्क को काम करने देते हैं। इससे पहले कि यह स्पष्ट रूप से धकेल दिया जाए compute
और / या persist
इसका उत्तर देखें, इससे पहले डस्क अभिकलन को लागू नहीं करता है अंतर के लिए ) ।
अन्य एड्स (विचार)
- ETL प्रवाह डेटा के लिए डिज़ाइन किया गया। केवल वही रखना जो कच्चे डेटा से आवश्यक है।
- सबसे पहले, ETL को Dask या PySpark जैसे चौखटे के साथ पूरे डेटा पर लागू करें, और संसाधित डेटा निर्यात करें।
- फिर देखें कि क्या संसाधित डेटा पूरे के रूप में मेमोरी में फिट हो सकता है।
- अपनी रैम बढ़ाने पर विचार करें।
- क्लाउड प्लेटफ़ॉर्म पर उस डेटा के साथ काम करने पर विचार करें।