কম্পিউটার

অনুপস্থিত মানগুলির সাথে পাইথন পান্ডাসে দুটি ডেটাফ্রেম কীভাবে তুলনা করবেন


পরিচয়

পান্ডাস একটি অনুপস্থিত মান উপস্থাপন করতে NumPy NaN (np.nan) অবজেক্ট ব্যবহার করে। এই Numpy NaN মানের কিছু আকর্ষণীয় গাণিতিক বৈশিষ্ট্য রয়েছে। উদাহরণস্বরূপ, এটি নিজের সমান নয়। যাইহোক, পাইথন কোন বস্তুই নিজের সাথে তুলনা করলে সত্য বলে মূল্যায়ন করে না।

কিভাবে করতে হবে..

np.nan কীভাবে আচরণ করে তা বোঝার জন্য আসুন কিছু উদাহরণ দেখি।

import pandas as pd
import numpy as np

# Python None Object compared against self.
print(f"Output \n *** {None == None} ")

আউটপুট

*** True


# Numpy nan compared against self.
print(f"Output \n *** {np.nan == np.nan} ")

আউটপুট

*** False


# Is nan > 10 or 1000 ?
print(f"Output \n *** {np.nan > 10} ")

আউটপুট

*** False

ঐতিহ্যগতভাবে, সিরিজ এবং ডেটাফ্রেম তুলনা করার জন্য সমান অপারেটর, ==, ব্যবহার করে। তুলনার ফলাফল একটি বস্তু। আসুন প্রথমে দেখি কিভাবে সমান অপারেটর ব্যবহার করতে হয়।

# create a dataframe with tennis players and their grandslam titles.
df = pd.DataFrame(data={"players": ['Federer', 'Nadal', 'Djokovic', 'Murray','Medvedev','Zverev'],
"titles": [20, 19, 17, 3,np.nan,np.nan]})
# set the index
df.index = df['players']

# sort the index in ascending
df.sort_index(inplace=True, ascending=True)

# check if the index is set
df.index.is_monotonic_increasing

# see records
print(f"Output \n{df}")

আউটপুট

         players    titles
players
Djokovic Djokovic     17.0
Federer  Federer      20.0
Medvedev Medvedev     NaN
Murray   Murray       3.0
Nadal    Nadal        19.0
Zverev Zverev      NaN

1. আরও ভালভাবে বোঝার জন্য, আমরা প্রথমে সমস্ত খেলোয়াড়কে একটি স্কেলার মান "ফেদেরার" এর সাথে তুলনা করব এবং ফলাফলগুলি দেখব৷

print(f'Output \n {df == "Federer"}')

আউটপুট

          players    titles
players
Djokovic  False       False
Federer   True        False
Medvedev   False      False
Murray     False      False
Nadal      False      False
Zverev     False      False


C:\Users\sasan\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py:253: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
res_values = method(rvalues)

2. এটি প্রত্যাশিত হিসাবে কাজ করে কিন্তু যখনই আপনি অনুপস্থিত মানগুলির সাথে ডেটাফ্রেমের তুলনা করার চেষ্টা করেন তখন সমস্যা হয়৷ এটি পর্যবেক্ষক করার জন্য আসুন df-কে নিজের সাথে তুলনা করি।

df_compare = df == df
print(f'Output \n {df_compare}')

আউটপুট

players titles
players
Djokovic True True
Federer True True
Medvedev True False
Murray True True
Nadal True True
Zverev True False

3. প্রথম নজরে, সমস্ত মান সঠিক বলে মনে হতে পারে, যেমনটা আপনি আশা করেন। যাইহোক, প্রতিটি কলামে শুধুমাত্র সত্য মান রয়েছে কিনা তা দেখতে .all পদ্ধতি ব্যবহার করুন (যেমনটি আমরা দুটি অনুরূপ বস্তুর তুলনা করছি ঠিক তাই?) একটি অপ্রত্যাশিত ফলাফল দেয়৷

print(f'Output \n {df_compare.all()}')

আউটপুট

players True
titles False
dtype: bool

4.আগের নোটে উল্লিখিত হিসাবে, এটি ঘটে কারণ অনুপস্থিত মানগুলি একে অপরের সাথে সমানভাবে তুলনা করে না। দেখুন, আমরা স্পষ্টভাবে জানি যে মেদভেদেভ এবং জাভেরেভের কোনো শিরোনাম নেই (অর্থাৎ NaN) তাই প্রতিটি কলামে অনুপস্থিত মানের সংখ্যা যোগ করলে আমাদের শিরোনামের জন্য 2 এবং খেলোয়াড়দের জন্য 0 মান পাওয়া উচিত। আসুন দেখি কি হয়।

print(f'Output \n {(df_compare == np.nan).sum()}')

আউটপুট

players 0
titles 0
dtype: int64

5. উপরের ফলাফলটি অপ্রত্যাশিত কারণ ন্যান খুব ভিন্নভাবে আচরণ করে।

6. দুটি সম্পূর্ণ ডেটাফ্রেমকে একে অপরের সাথে তুলনা করার সঠিক উপায় হল সমান অপারেটর (==) নয় বরং .equals পদ্ধতির সাথে।

এই পদ্ধতিটি একই অবস্থানে থাকা NaNগুলিকে সমান হিসাবে বিবেচনা করে৷

একটি গুরুত্বপূর্ণ নোট হল .eq পদ্ধতি হল ==নয় .equals এর সমতুল্য।

print(f'Output \n {df_compare.equals(df_compare)}')

আউটপুট

True

7. আপনি যদি আপনার ইউনিট পরীক্ষার অংশ হিসাবে দুটি ডেটাফ্রেম তুলনা করার চেষ্টা করেন তবে করার আরেকটি উপায় রয়েছে। assert_frame_equal ফাংশন একটি AssertionError উত্থাপন করে যদি দুটি ডেটাফ্রেম সমান না হয়। দুটি ডেটাফ্রেম সমান হলে এটি কোনটিই প্রদান করে না৷

from pandas.testing import assert_frame_equal
print(f'Output \n {assert_frame_equal(df_compare, df_compare) is None}')

আউটপুট

True

  1. অনুপস্থিত মানগুলির সাথে পাইথন পান্ডাসে দুটি ডেটাফ্রেম কীভাবে তুলনা করবেন

  2. কিভাবে আমরা পাইথনে দুটি অভিধানের তুলনা করব?

  3. কিভাবে আমরা পাইথনে দুটি টিপল তুলনা করব?

  4. আমরা পাইথনে দুটি তালিকা কিভাবে তুলনা করব?