PySpark DataFrames में कॉलम क्यों हटाएँ?
कई कारणों से डेटा प्रीप्रोसेसिंग में कॉलम हटाना एक आम कार्य है। अनावश्यक या अप्रासंगिक कॉलम हटाने से हमें प्रोसेस किए जाने वाले डेटा की मात्रा में उल्लेखनीय कमी आ सकती है। इससे हमारा डेटासेट सुसंगठित होता है, विश्लेषण आसान होता है, और संभवतः हमारे PySpark जॉब्स का प्रदर्शन बेहतर होता है।
इसके अलावा, जब हम मशीन लर्निंग मॉडलों के लिए डेटा तैयार करते हैं, तो फीचर चयन में अक्सर ऐसे कॉलम हटाना शामिल होता है जो मॉडल की सटीकता में योगदान नहीं देते या शोर जोड़ सकते हैं। यह कदम अधिक कुशल और प्रभावी मॉडलों की ओर ले जा सकता है।
अंततः, कॉलम हटाना डेटा गुणवत्ता सुधारने की एक रणनीति भी हो सकती है। यदि किसी कॉलम में बहुत अधिक मिसिंग मान या त्रुटिपूर्ण डेटा है, तो उसे हटाना सबसे बेहतर विकल्प हो सकता है।
PySpark DataFrame से एक सिंगल कॉलम कैसे हटाएँ
मान लीजिए हमारे पास df नाम का एक DataFrame है जिसमें पाँच कॉलम हैं: player_name, player_position, team, minutes_played, और score। कॉलम minutes_played में कई मिसिंग वैल्यू हैं, इसलिए हम इसे हटाना चाहते हैं।
PySpark में, हम .drop() मेथड का उपयोग करके DataFrame से एक सिंगल कॉलम हटा सकते हैं।
सिंटैक्स है df.drop("column_name"), जहाँ:
dfवह DataFrame है जिससे हम कॉलम हटाना चाहते हैंcolumn_nameवह कॉलम नाम है जिसे हटाना है।
df.drop() मेथड एक नया DataFrame लौटाता है जिसमें बताए गए कॉलम हटा दिए गए होते हैं।
कॉलम हटाने का तरीका इस प्रकार है:
df_dropped = df.drop("minutes_played")
PySpark DataFrame से कई कॉलम कैसे हटाएँ
मान लें कि हम अपने DataFrame df का विश्लेषण करना चाहते हैं, लेकिन टीम या खिलाड़ी की पोज़ीशन पर विचार नहीं करना चाहते—तो हम दोनों कॉलम हटाना चाहते हैं। ऐसा करने के एक से अधिक तरीके हैं, तो आइए अपने विकल्प देखें।
PySpark DataFrame से कई कॉलम हटाने के लिए, हम .drop() मेथड को कॉलम नामों की सूची पास कर सकते हैं। यह हम दो तरीकों से कर सकते हैं:
# विकल्प 1: नामों को सूची के रूप में पास करना
df_dropped = df.drop(["team", "player_position"])
# विकल्प 2: नामों को अलग-अलग आर्ग्यूमेंट्स के रूप में पास करना
df_dropped = df.drop("team", "player_position")
वैकल्पिक रूप से, हम कई .drop() कॉल्स को चेन कर सकते हैं। यद्यपि यह तकनीकी रूप से काम करता है, इसे आम तौर पर सबसे कुशल या सुरुचिपूर्ण तरीका नहीं माना जाता। हर कॉल एक नया DataFrame बनाती है, जो विशेष रूप से बड़े डेटासेट पर काम करते समय ओवरहेड बढ़ा सकती है।
df_dropped = df.drop("team").drop("player_position")
शर्तों के आधार पर कॉलम हटाना
किस कॉलम को हटाना है यह बताने के बजाय, हम तरीका उलट सकते हैं और सिर्फ उन्हीं कॉलमों का चयन कर सकते हैं जो किसी शर्त या आवश्यकता को पूरा करते हैं। इस प्रकार, लौटाया गया DataFrame अब अवांछित कॉलमों को शामिल नहीं करेगा।
.select() का उपयोग
हम PySpark में .select() मेथड को लिस्ट कम्प्रिहेंशन के साथ उपयोग करके कुछ मानदंडों के आधार पर एक या अधिक कॉलम हटा सकते हैं। यह मेथड लचीला है—इसे सरल से लेकर जटिल शर्तों तक लागू किया जा सकता है।
यह मेथड इस सिंटैक्स का अनुसरण करता है df.select([col for col in df.columns if condition]), जहाँ:
dfवह DataFrame है जिस पर आप काम कर रहे हैं।conditionवह मानदंड है जिसके आधार पर आप रखने वाले कॉलमों को फ़िल्टर करते हैं।
आइए अपने DataFrame df के साथ फिर काम करें और team कॉलम को छोड़कर बाकी सभी कॉलम चुनें:
df_sel = df.select([col for col in df.columns if col != "team"])
.selectExpr() के साथ जटिल शर्तें
यदि हम SQL में सहज हैं और कॉलम फ़िल्टर करते समय अधिक जटिल शर्तें लागू करने की आवश्यकता है, तो PySpark का .selectExpr() मेथड एक शक्तिशाली समाधान प्रदान करता है। यह हमें SQL-जैसे एक्सप्रेशन का उपयोग करके सीधे अपने PySpark कोड में कॉलम चुनने और उनमें हेरफेर करने देता है।
उदाहरण के लिए, यह उदाहरण देखें:
# विशिष्ट कॉलम चुनें और नया 'FullMatch' कॉलम बनाएं
df_sel = df.selectExpr("player_name", "player_position", "minutes_played >= 60 as FullMatch")
यहाँ, हम केवल किसी कॉलम को बाहर नहीं कर रहे हैं। हम:
player_nameऔरplayer_positionकॉलम चुन रहे हैं।FullMatchनाम का एक नया कॉलम बना रहे हैं जो दर्शाता है कि क्या किसी खिलाड़ी ने पूरा मैच (60 मिनट या अधिक) खेला।
यह लचीलापन .selectExpr() को उन स्थितियों में अमूल्य बनाता है जहाँ सरल लिस्ट कम्प्रिहेंशन पर्याप्त नहीं हो सकता।
सर्वोत्तम प्रथाएँ
जब हम अपने DataFrame से कॉलम हटाने का निर्णय लेते हैं, तो डेटा अखंडता, कोड पठनीयता और दक्षता बनाए रखने के लिए कुछ सर्वोत्तम प्रथाओं का पालन करना महत्वपूर्ण है।
1. अपने डेटा का बैकअप लें: अपने DataFrame में कोई भी संशोधन करने से पहले, खासकर कॉलम हटाते समय, एक बैकअप कॉपी बनाना समझदारी है। इससे आवश्यकता पड़ने पर आप मूल डेटा पर लौट सकते हैं।
df_backup = df.persist() # बाद में पुनः गणना से बचने के लिए DataFrame को कैश करें
2. inplace=False (डिफ़ॉल्ट) के साथ हटाएँ: डिफ़ॉल्ट रूप से, .drop() मेथड मूल को बदले बिना एक नया DataFrame लौटाता है। यह आम तौर पर सुरक्षित होता है। यदि आप बिल्कुल सुनिश्चित हैं कि आप मूल DataFrame को ही संशोधित करना चाहते हैं, तो आप inplace=True का उपयोग कर सकते हैं, लेकिन सावधानी बरतें।
df_dropped = df.drop("column_to_drop", inplace=False) # डिफ़ॉल्ट व्यवहार
3. अपने निर्णयों का दस्तावेज़ीकरण करें: यदि आप किसी सहयोगी प्रोजेक्ट पर काम कर रहे हैं या भविष्य में अपने कोड पर लौटने की संभावना है, तो यह बताने के लिए टिप्पणियाँ जोड़ना उपयोगी होता है कि आपने कुछ कॉलम हटाने का निर्णय क्यों लिया। यह दस्तावेज़ीकरण आपके और दूसरों के लिए मूल्यवान संदर्भ प्रदान कर सकता है।
4. कॉलम का नाम बदलने पर विचार करें: कॉलम हटाने के बजाय, हमें यह भी सोचना चाहिए कि क्या उनका नाम बदलना अधिक उपयुक्त हो सकता है, खासकर यदि उनमें निहित जानकारी भविष्य के विश्लेषण के लिए मूल्यवान हो सकती है। PySpark हमें .withColumnRenamed() मेथड प्रदान करता है जो कॉलम का नाम बदलने में मदद करता है।
निष्कर्ष
इस ट्यूटोरियल में, हमने .drop() और .select() मेथड्स का उपयोग करके सिंगल और मल्टीपल कॉलम हटाना सीखा। हमने यह भी बताया कि यदि हमें अधिक जटिल चयन तकनीकों की आवश्यकता हो तो SQL एक्सप्रेशन का लाभ उठाने के वैकल्पिक तरीके क्या हैं।
यदि आप अपनी स्किल्स बढ़ाना चाहते हैं और PySpark की शक्तिशाली तकनीकों का लाभ उठाना चाहते हैं, तो इन कोर्सेज और सामग्रियों पर नज़र डालें:
FAQs
PySpark में regex के आधार पर कॉलम कैसे हटाऊँ?
PySpark में regex पैटर्न के आधार पर कॉलम हटाने के लिए, आप सूची समेकन (list comprehension) और re मॉड्यूल (रेगुलर एक्सप्रेशंस के लिए) का उपयोग करके कॉलम नामों को फ़िल्टर कर सकते हैं, फिर फ़िल्टर की गई सूची को .drop() मेथड में पास करें।
PySpark में एक जैसे नाम वाले कॉलम कैसे हटाऊँ?
PySpark किसी DataFrame में डुप्लिकेट कॉलम नामों की अनुमति नहीं देता। यदि आपके डेटा स्रोत में डुप्लिकेट नाम हैं, तो DataFrame बनाते समय संभवतः त्रुटि आएगी। सर्वोत्तम प्रथा है कि डुप्लिकेट नामों को स्रोत पर या DataFrame निर्माण के दौरान ही हल किया जाए।
PySpark में केवल null मान वाले कॉलम कैसे हटाऊँ?
PySpark में केवल null मान वाले कॉलम हटाने के लिए, हम पहले प्रत्येक कॉलम में null की गिनती count(when(col(c).isNull(), c)) से निकालते हैं। फिर वे कॉलम पहचानते हैं जहाँ null की गिनती DataFrame की कुल पंक्ति संख्या के बराबर है। अंत में, इन कॉलमों को .drop() मेथड से हटाते हैं।
PySpark में सशर्त रूप से कॉलम कैसे हटाऊँ?
df.select([col for col in df.columns if condition]) का उपयोग करें।

लेखक
Maria Eugenia Inzaugarat
PySpark बड़े डेटासेट के साथ काम करते समय खास तौर पर उपयोगी है क्योंकि यह हमारे डेटासेट को साफ करने के लिए कुशल तरीके प्रदान करता है। इस लेख में, हम एक आम क्लीनिंग कार्य पर ध्यान देंगे: PySpark की विधियों
.drop()और.select()का उपयोग करके DataFrame से कॉलम कैसे हटाएँ।PySpark के बारे में और जानने के लिए, यह Introduction to PySpark कोर्स देखें।