सुपर सरल स्तंभ असाइनमेंट
एक पंडों के डेटाफ्रेम को कॉलम के एक आदेशित हुक्म के रूप में लागू किया जाता है।
इसका मतलब है कि इसका __getitem__
[]
उपयोग न केवल एक निश्चित कॉलम प्राप्त करने के लिए किया जा सकता है, बल्कि__setitem__
[] =
किया जा सकता है एक नए कॉलम को असाइन करने के लिए भी किया जा सकता है।
उदाहरण के लिए, इस dataframe बस का उपयोग करके एक स्तंभ इससे जुड़ा हो सकता है []
एक्सेसर
size name color
0 big rose red
1 small violet blue
2 small tulip red
3 small harebell blue
df['protected'] = ['no', 'no', 'no', 'yes']
size name color protected
0 big rose red no
1 small violet blue no
2 small tulip red no
3 small harebell blue yes
ध्यान दें कि यह काम करता है भले ही डेटाफ्रेम का सूचकांक बंद हो।
df.index = [3,2,1,0]
df['protected'] = ['no', 'no', 'no', 'yes']
size name color protected
3 big rose red no
2 small violet blue no
1 small tulip red no
0 small harebell blue yes
[] = जाने का रास्ता है, लेकिन बाहर देखो!
हालाँकि, यदि आपके पास कोई pd.Series
डेटाफ़्रेम है, जहाँ अनुक्रमणिका बंद है, उसे असाइन करने का प्रयास करें , तो आप परेशानी में चलेंगे। उदाहरण देखें:
df['protected'] = pd.Series(['no', 'no', 'no', 'yes'])
size name color protected
3 big rose red yes
2 small violet blue no
1 small tulip red no
0 small harebell blue no
ऐसा इसलिए है क्योंकि pd.Series
डिफ़ॉल्ट रूप से एक इंडेक्स 0 से n तक एनुमरेट किया गया है। और पांडा [] =
विधि की कोशिश करता है "स्मार्ट" होने की है
वास्तव में क्या चल रहा है।
जब आप उपयोग करते हैं [] =
विधि का पांडा बाएं हाथ के डेटाफ्रेम और दाहिने हाथ की श्रृंखला के सूचकांक का उपयोग करके चुपचाप एक बाहरी जुड़ाव या बाहरी मर्ज का प्रदर्शन करता है।df['column'] = series
पक्षीय लेख
यह जल्दी से संज्ञानात्मक असंगति का कारण बनता है, क्योंकि []=
विधि इनपुट के आधार पर कई अलग-अलग चीजों को करने की कोशिश कर रही है, और परिणाम की भविष्यवाणी नहीं की जा सकती है जब तक कि आप सिर्फ यह नहीं जानते कि पांडा कैसे काम करते हैं। इसलिए मैं []=
कोड बेस के खिलाफ सलाह दूंगा, लेकिन जब नोटबुक में डेटा की खोज की जाती है, तो यह ठीक है।
समस्या के आसपास जाना
अगर आपके पास एक है pd.Series
और चाहते हैं कि यह ऊपर से नीचे तक सौंपा जाए, या यदि आप उत्पादक कोड को कोड कर रहे हैं और आप सूचकांक आदेश के बारे में सुनिश्चित नहीं हैं, तो इस तरह के मुद्दे के लिए इसे सुरक्षित करना लायक है।
आप pd.Series
एक np.ndarray
या एक डाउनकास्ट कर सकते हैं list
, यह चाल चलेगा।
df['protected'] = pd.Series(['no', 'no', 'no', 'yes']).values
या
df['protected'] = list(pd.Series(['no', 'no', 'no', 'yes']))
लेकिन यह बहुत स्पष्ट नहीं है।
कुछ कोडर साथ आ सकते हैं और कहेंगे "अरे, यह बेमानी लग रहा है, मैं अभी इसे दूर कर दूँगा"।
स्पष्ट तरीका
का सूचकांक pd.Series
होना df
स्पष्ट है।
df['protected'] = pd.Series(['no', 'no', 'no', 'yes'], index=df.index)
या अधिक वास्तविक रूप से, आपके पास संभवतः pd.Series
पहले से ही उपलब्ध है।
protected_series = pd.Series(['no', 'no', 'no', 'yes'])
protected_series.index = df.index
3 no
2 no
1 no
0 yes
अब सौंपा जा सकता है
df['protected'] = protected_series
size name color protected
3 big rose red no
2 small violet blue no
1 small tulip red no
0 small harebell blue yes
के साथ वैकल्पिक तरीका है df.reset_index()
के बाद से सूचकांक मतभेद समस्या है, अगर आपको लगता है कि dataframe के सूचकांक चाहिए बातें निर्देशित नहीं, तो आप बस सूचकांक ड्रॉप कर सकते हैं, इस तेजी से होना चाहिए, लेकिन यह बहुत साफ है के बाद से अपने कार्य अब नहीं है, शायद दो बातें करता है।
df.reset_index(drop=True)
protected_series.reset_index(drop=True)
df['protected'] = protected_series
size name color protected
0 big rose red no
1 small violet blue no
2 small tulip red no
3 small harebell blue yes
पर ध्यान दें df.assign
जबकि df.assign
यह अधिक स्पष्ट तुम क्या कर रहे, यह वास्तव में इसके बाद के संस्करण के रूप में सभी एक ही समस्या है[]=
df.assign(protected=pd.Series(['no', 'no', 'no', 'yes']))
size name color protected
3 big rose red yes
2 small violet blue no
1 small tulip red no
0 small harebell blue no
बस यह देखें df.assign
कि आपका कॉलम कहा नहीं गया है self
। यह त्रुटियों का कारण होगा। यह df.assign
बदबूदार बनाता है , क्योंकि समारोह में इस तरह की कलाकृतियां हैं।
df.assign(self=pd.Series(['no', 'no', 'no', 'yes'])
TypeError: assign() got multiple values for keyword argument 'self'
आप कह सकते हैं, "ठीक है, मैं अभी उपयोग नहीं करूंगा self
"। लेकिन कौन जानता है कि भविष्य में नए तर्कों का समर्थन करने के लिए यह फ़ंक्शन कैसे बदलता है। हो सकता है कि आपके कॉलम का नाम पंडों के एक नए अपडेट में एक तर्क होगा, जिससे अपग्रेड के साथ समस्या हो सकती है।