कैसे ठीक करें: टाइप की गई सरणी [फ्लोट64] की स्केलर प्रकार [बूल] से तुलना करने में असमर्थ
पांडा का उपयोग करते समय आपको एक त्रुटि का सामना करना पड़ सकता है:
TypeError : cannot compare a dtyped [object] array with a scalar of type [bool]
यह त्रुटि आम तौर पर तब होती है जब आप कई स्थितियों के आधार पर डेटाफ़्रेम को सब्मिट करने का प्रयास करते हैं और प्रत्येक व्यक्तिगत स्थिति के आसपास कोष्ठक लगाने में विफल होते हैं।
निम्नलिखित उदाहरण दिखाता है कि व्यवहार में इस त्रुटि को कैसे ठीक किया जाए।
त्रुटि को पुन: उत्पन्न कैसे करें
मान लीजिए कि हम निम्नलिखित पांडा डेटाफ़्रेम बनाते हैं:
import pandas as pd #createDataFrame df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], ' position ': ['G', 'G', 'F', 'C', 'G', 'F', 'F', 'C'], ' points ': [21, 30, 26, 29, 14, 29, 22, 16]}) #view DataFrame print (df) team position points 0 AG 21 1 AG 30 2 AF26 3AC 29 4 BG 14 5 BF 29 6 BF 22 7 BC 16
अब मान लीजिए कि हम केवल उन पंक्तियों को प्रदर्शित करने के लिए .loc फ़ंक्शन का उपयोग करने का प्रयास करते हैं जहां टीम “ए” के बराबर है और स्थिति “जी” के बराबर है:
#attempt to only show rows where team='A' and position='G'
df. loc [df. team == ' A ' & df. position == ' G ']
TypeError : cannot compare a dtyped [object] array with a scalar of type [bool]
हमें एक वैल्यूएरर प्राप्त होता है क्योंकि हमने व्यक्तिगत स्थितियों के आसपास कोष्ठक नहीं लगाए हैं।
चूंकि & ऑपरेटर को == ऑपरेटर पर प्राथमिकता मिलती है, इसलिए पांडा इस कथन की सही क्रम में व्याख्या करने में विफल रहते हैं।
त्रुटि को कैसे ठीक करें
इस त्रुटि को ठीक करने का सबसे आसान तरीका यह है कि अलग-अलग स्थितियों के आसपास निम्नानुसार कोष्ठक जोड़ें:
#only show rows where team='A' and position='G'
df. loc [(df. team == ' A ') & (df. position == ' G ')]
team position points
0 A G 21
1 A G 30
ध्यान दें कि हमें कोई वैल्यूएरर प्राप्त नहीं होता है और हम डेटाफ़्रेम को सफलतापूर्वक सब्मिट करने का प्रबंधन करते हैं।
अतिरिक्त संसाधन
निम्नलिखित ट्यूटोरियल बताते हैं कि पायथन में अन्य सामान्य त्रुटियों को कैसे ठीक किया जाए:
कैसे ठीक करें: कॉलम ओवरलैप होते हैं लेकिन कोई प्रत्यय निर्दिष्ट नहीं किया जाता है
कैसे ठीक करें: आप ऑब्जेक्ट और int64 कॉलम को मर्ज करने का प्रयास कर रहे हैं
कैसे ठीक करें: बेमेल कॉलम वाली पंक्ति को परिभाषित करने में असमर्थ