परिचय
पैंडास मिसिंग वैल्यू को दर्शाने के लिए NumPy NaN (np.nan) ऑब्जेक्ट का उपयोग करता है। इस Numpy NaN वैल्यू के कुछ दिलचस्प गणितीय गुण हैं। उदाहरण के लिए, यह स्वयं के बराबर नहीं है। हालांकि, पायथन None ऑब्जेक्ट स्वयं से तुलना करने पर True मूल्यांकन करता है।
कैसे करें
np.nan का व्यवहार समझें
import pandas as pd
import numpy as np
# Python None ऑब्जेक्ट की स्वयं से तुलना
print(f"Output \n *** {None == None}")
आउटपुट: True
# Numpy nan की स्वयं से तुलना
print(f"Output \n *** {np.nan == np.nan}")
आउटपुट: False
# क्या nan > 10 या 1000 है?
print(f"Output \n *** {np.nan > 10}")
आउटपुट: False
DataFrames की तुलना
पारंपरिक रूप से, Series और DataFrames तुलना करने के लिए इक्वल्स ऑपरेटर, ==, का उपयोग करते हैं। तुलना का परिणाम एक ऑब्जेक्ट होता है।
# टेनिस खिलाड़ियों और उनके ग्रैंड स्लैम खिताबों के साथ डेटाफ्रेम बनाएं
df = pd.DataFrame(data={
"players": ['Federer', 'Nadal', 'Djokovic', 'Murray', 'Medvedev', 'Zverev'],
"titles": [20, 19, 17, 3, np.nan, np.nan]
})
df.index = df['players']
df.sort_index(inplace=True, ascending=True)
print(f"Output \n{df}")
1. सभी खिलाड़ियों की स्केलर वैल्यू "Federer" से तुलना करें
print(f'Output \n {df == "Federer"}')
2. DataFrame की स्वयं से तुलना करें
df_compare = df == df
print(f'Output \n {df_compare}')
3. .all() मेथड का उपयोग करके जांचें कि क्या प्रत्येक कॉलम में केवल True मान हैं
print(f'Output \n {df_compare.all()}')
आउटपुट: players True, titles False
यह अप्रत्याशित परिणाम होता है क्योंकि मिसिंग वैल्यूज़ एक-दूसरे के साथ समान रूप से तुलना नहीं करतीं।
4. मिसिंग वैल्यूज़ की गिनती करने का प्रयास
print(f'Output \n {(df_compare == np.nan).sum()}')
आउटपुट: players 0, titles 0 (अप्रत्याशित क्योंकि nan अलग व्यवहार करता है)
5. दो पूरे DataFrames की तुलना करने का सही तरीका
equals मेथड का उपयोग करें, इक्वल्स ऑपरेटर (==) का नहीं। यह मेथड समान स्थान पर NaNs को समान मानता है।
महत्वपूर्ण नोट: .eq मेथड == के बराबर है, .equals का नहीं।
print(f'Output \n {df_compare.equals(df_compare)}')
आउटपुट: True
6. यूनिट टेस्टिंग के लिए assert_frame_equal
अगर आप यूनिट टेस्टिंग के हिस्से के रूप में दो DataFrames की तुलना कर रहे हैं, तो assert_frame_equal फंक्शन AssertionError उठाता है अगर दो DataFrames समान नहीं हैं। अगर दो DataFrames समान हैं तो यह None लौटाता है।
from pandas.testing import assert_frame_equal
print(f'Output \n {assert_frame_equal(df_compare, df_compare) is None}')
आउटपुट: True