परिचय
लापता मान का प्रतिनिधित्व करने के लिए पांडा NumPy NaN (np.nan) ऑब्जेक्ट का उपयोग करता है। इस Numpy NaN मान में कुछ दिलचस्प गणितीय गुण हैं। उदाहरण के लिए, यह स्वयं के बराबर नहीं है। हालांकि, पाइथन कोई नहीं वस्तु स्वयं की तुलना में सत्य के रूप में मूल्यांकन करती है।
इसे कैसे करें..
np.nan कैसे व्यवहार करता है, इसे समझने के लिए आइए कुछ उदाहरण देखें।
pdimport numpy as np# के रूप में आयात करेंआउटपुट
*** सच
# सेल्फ.प्रिंट (f"आउटपुट \n *** {np.nan ==np.nan} ")की तुलना में नम्पी नैनआउटपुट
*** गलत
# नान> 10 या 1000 है?प्रिंट(f"आउटपुट \n *** {np.nan> 10}")आउटपुट
*** गलतपरंपरागत रूप से, श्रृंखला और डेटाफ़्रेम तुलना करने के लिए बराबर ऑपरेटर, ==का उपयोग करते हैं। तुलना का परिणाम एक वस्तु है। आइए पहले देखें कि बराबर ऑपरेटर का उपयोग कैसे करें।
# टेनिस खिलाड़ियों और उनके ग्रैंडस्लैम खिताबों के साथ एक डेटाफ्रेम बनाएं। ज्वेरेव'],"शीर्षक":[20, 19, 17, 3,np.nan,np.nan]})# इंडेक्स सेट करेंdf.index =df['players']# अनुक्रमणिका को आरोही में क्रमबद्ध करेंdf.sort_index(inplace) =सत्य, आरोही=सत्य)# जाँचें कि क्या सूचकांक सेट हैdf.index.is_monotonic_increasing# रिकॉर्ड्सप्रिंट देखें(f"आउटपुट \n{df}")आउटपुट
खिलाड़ी खिताबखिलाड़ीजोकोविच जोकोविच 17.0फेडरर फेडरर 20.0मेदवेदेव मेदवेदेव नाएनमुरे मरे 3.0नडाल नडाल 19.0ज़वेरेव ज्वेरेव नाएन1. बेहतर ढंग से समझने के लिए, हम पहले सभी खिलाड़ियों की तुलना एक अदिश मान "फेडरर" से करेंगे और परिणाम देखेंगे।
प्रिंट (f'आउटपुट \n {df =="Federer"}')आउटपुट
खिलाड़ी शीर्षकखिलाड़ीजोकोविच झूठा झूठाफेडरर सच झूठमेदवेदेव झूठा झूठामुरे झूठाझूठानडाल झूठाझूरेव झूठा
C:\Users\sasan\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py:253:FutureWarning:तत्ववार तुलना विफल; इसके बजाय स्केलर लौटा रहा है, लेकिन भविष्य में तत्व के अनुसार तुलना_वैल्यू =विधि (रावल्यू)करेगा2. यह अपेक्षा के अनुरूप काम करता है लेकिन जब भी आप डेटाफ़्रेम की अनुपलब्ध मानों से तुलना करने का प्रयास करते हैं तो यह समस्याग्रस्त हो जाता है। इसे देखने के लिए आइए हम df की तुलना स्वयं से करें।
df_compare =df ==dfprint(f'Output \n {df_compare}')आउटपुट
खिलाड़ियों के शीर्षकखिलाड़ीजोकोविच ट्रू ट्रूफ़ेडरर ट्रू ट्रूमेदवेदेव ट्रू फ़ल्समुरे ट्रू ट्रूनाडल ट्रू ट्रूज़वेरेव ट्रू फ़ल्स3. पहली नज़र में, सभी मान सही प्रतीत हो सकते हैं, जैसा कि आप उम्मीद करेंगे। हालाँकि, यह देखने के लिए .all पद्धति का उपयोग करें कि क्या प्रत्येक कॉलम में केवल True मान हैं (जैसा कि यह होना चाहिए क्योंकि हम दो समान वस्तुओं की सही तुलना कर रहे हैं?) एक अप्रत्याशित परिणाम देता है।
प्रिंट (f'आउटपुट \n {df_compare.all()}')आउटपुट
खिलाड़ी Truetitles Falsedtype:bool4. जैसा कि पहले के नोटों में उल्लेख किया गया है, ऐसा इसलिए होता है क्योंकि लापता मान एक दूसरे के साथ समान रूप से तुलना नहीं करते हैं। देखिए, हम स्पष्ट रूप से जानते हैं कि मेदवेदेव और ज्वेरेव के पास कोई शीर्षक (यानी NaN) नहीं है, इसलिए यदि हम प्रत्येक कॉलम में लापता मानों की संख्या जोड़ते हैं तो हमें शीर्षकों के लिए मान 2 और खिलाड़ियों के लिए 0 प्राप्त करना चाहिए। देखते हैं क्या होता है।
प्रिंट (f'आउटपुट \n {(df_compare ==np.nan).sum()}')आउटपुट
खिलाड़ी 0शीर्षक 0dtype:int645. उपरोक्त परिणाम अप्रत्याशित है क्योंकि नान बहुत अलग तरीके से व्यवहार करता है।
6. दो संपूर्ण डेटाफ़्रेम की एक दूसरे से तुलना करने का सही तरीका बराबर ऑपरेटर (==) के साथ नहीं बल्कि .equals विधि के साथ है।
यह विधि समान स्थान पर मौजूद NaN को समान मानती है।
एक महत्वपूर्ण नोट .eq विधि ==के बराबर नहीं है। के बराबर है।
प्रिंट (f'आउटपुट \n {df_compare.equals(df_compare)}')आउटपुट
सच7. यदि आप अपने यूनिट परीक्षण के भाग के रूप में दो डेटाफ़्रेम की तुलना करने का प्रयास कर रहे हैं, तो ऐसा करने का एक और तरीका भी है। यदि दो डेटाफ़्रेम समान नहीं हैं, तो assert_frame_equal फ़ंक्शन एक AssertionError उठाता है। यदि दो डेटाफ़्रेम बराबर हैं तो यह कोई नहीं लौटाता है।
pandas.testing से आयात assert_frame_equalprint(f'Output \n {assert_frame_equal(df_compare, df_compare) is none}')आउटपुट
सच