Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन पैंडास में मिसिंग वैल्यूज़ के साथ दो DataFrames की तुलना कैसे करें

परिचय

पैंडास मिसिंग वैल्यू को दर्शाने के लिए 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

  1. - पायथन में दो डिक्शनरी की तुलना कैसे करें?

    पायथन में डिक्ट भी क्लास हैं। इनमें __eq__ मेथड ओवरराइड होता है, इसलिए आप == ऑपरेटर का उपयोग करके जांच सकते हैं कि 2 डिक्शनरी समान हैं या नहीं। उदाहरण a = {foo: 10, bar: 150} b = {foo: 10, bar: 150} print(a == b) आउटपुट यह आउटपुट देगा: True यदि आप 2 डिक्शनरी में शेयर्ड आइटम की लिस्ट चाहते हैं, तो आ

  1. - पायथन में दो टुपल की तुलना कैसे करें?

    टुपल की तुलना पोजिशन दर पोजिशन की जाती है: पहले टुपल का पहला आइटम दूसरे टुपल के पहले आइटम से तुलना की जाती है; यदि वे समान नहीं हैं, तो यह तुलना का परिणाम है, अन्यथा दूसरा आइटम माना जाता है, फिर तीसरा और इसी तरह। उदाहरण >>> a = (1, 2, 3) >>> b = (1, 2, 5) >>> a < b True ए

  1. - पायथन में दो लिस्ट की तुलना कैसे करें?

    इसे करने का सबसे आसान तरीका सेट का उपयोग करना है। सेट लिस्ट लेते हैं और केवल यूनिक वैल्यू लेते हैं। फिर आप सामान्य ऑब्जेक्ट प्राप्त करने के लिए इंटरसेक्शन की तरह काम करने वाले & ऑपरेशन को कर सकते हैं। उदाहरण >>> a = [1, 2, 3, 4, 5] >>> b = [9, 8, 7, 6, 5] >>> set(a) &