الدليل لتحديد ومعالجة NaN في بايثون | القيم المفقودة

1. طريقة تحديد NaN في بايثون

ما هو NaN؟

NaN (ليس رقمًا) هو قيمة عائمة خاصة تمثل أن العملية العددية غير صالحة أو غير معرفة. عادةً ما تظهر نتيجةً للقسمة على صفر أو نتيجة عملية غير صالحة، لذا يجب توخي الحذر بشكل خاص عند تحليل البيانات أو المعالجة العددية. إذا لم يتم معالجة NaN بشكل صحيح، قد تصبح نتائج الحساب غير دقيقة أو قد لا يعمل البرنامج كما هو متوقع.

أهمية تحديد NaN

إذا كان NaN موجودًا في مجموعة البيانات، قد تتأثر موثوقية البيانات ونتائج الحساب. لذلك، من المهم أولاً تحديد NaN، ثم إجراء المعالجة المناسبة (مثل الحذف أو الاستبدال) لاحقًا.

2. طريقة إنشاء NaN

في بايثون، يمكن إنشاء NaN باستخدام float('nan'). يُستخدم للإشارة صراحةً إلى نتيجة غير صالحة في الحسابات العددية.
num = float('nan')
print(num)  # النتيجة: nan

الفرق بين None

NaN غير صالح عددياً، بينما None يدل على حالة «لا شيء». يمكن مقارنة None باستخدام ==، لكن NaN لا يساوي نفسه، لذا فإن استخدام == للمقارنة غير مناسب.
num = float('nan')
print(num == num)  # النتيجة: False

none_value = None
print(none_value == None)  # النتيجة: True

3. طريقة تحديد NaN

3.1. الفحص باستخدام المكتبة القياسية (math.isnan())

لاستخدام المكتبة القياسية في بايثون لتحديد NaN، يتم استخدام math.isnan(). تُعيد هذه الدالة القيمة True إذا كانت القيمة المعطاة NaN.
import math

num = float('nan')
print(math.isnan(num))  # النتيجة: True

3.2. الفحص باستخدام NumPy (numpy.isnan())

NumPy هي مكتبة متخصصة في حساب المصفوفات والجدوال، وتوفر الدالة numpy.isnan() لتحديد NaN داخل المصفوفات بكفاءة. تُستخدم كثيرًا في التحليل الرقمي ومعالجة البيانات العلمية.
import numpy as np

num_list = [1, 2, np.nan, 4]
print(np.isnan(num_list))  # النتيجة: [False False  True False]

3.3. الفحص باستخدام pandas (pandas.isna())

عند التعامل مع إطارات البيانات، يتم استخدام isna() أو isnull() من pandas لتحديد NaN. تساعد هذه الدوال في تنظيف البيانات ومعالجة القيم المفقودة.
import pandas as pd
import numpy as np

data = pd.Series([1, 2, np.nan, 4])
print(pd.isna(data))  # النتيجة: 0    False
                      #      1    False
                      #      2     True
                      #      3    False

4. طريقة حذف أو استبدال NaN

4.1. حذف NaN من القائمة

لحذف NaN الموجود في القائمة، يمكنك دمج math.isnan() مع تعبير الفهم القائم على القائمة.
import math

num_list = [1, 2, float('nan'), 4]
clean_list = [num for num in num_list if not math.isnan(num)]
print(clean_list)  # النتيجة: [1, 2, 4]

4.2. حذف NaN باستخدام pandas (dropna())

عند حذف NaN من إطار البيانات، استخدم طريقة dropna(). هذا يزيل الصفوف أو الأعمدة التي تحتوي على NaN.
import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, 6]})
clean_df = df.dropna()
print(clean_df)

4.3. استبدال NaN باستخدام pandas (fillna())

بدلاً من حذف NaN، إذا كنت تريد استبداله بقيمة معينة، استخدم طريقة fillna().
import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, 6]})
df.fillna(0, inplace=True)
print(df)

5. الحسابات التي تحتوي على NaN

عند احتواء الحساب على NaN، تصبح النتيجة NaN أيضًا، لذا للحصول على نتيجة دقيقة يجب إزالة NaN مسبقًا أو استبداله.
import numpy as np

result = 10 + np.nan
print(result)  # النتيجة: nan

مثال على حساب إحصائي يحتوي على NaN

عند إجراء حسابات إحصائية على مجموعة بيانات تحتوي على NaN، إذا رغبت في تجاهل NaN أثناء الحساب، يمكنك استخدام دالة nanmean() في NumPy. هذه الدالة تحسب المتوسط مع استبعاد NaN.
import numpy as np

data = [1, 2, np.nan, 4]
mean = np.nanmean(data)  # حساب المتوسط مع تجاهل NaN
print(mean)  # النتيجة: 2.3333...

6. ملاحظات حول فحص NaN

6.1. سلوك عوامل المقارنة

NaN له خاصية خاصة حيث لا يكون مساويًا عند مقارنته بأية قيمة أخرى أو بنفسه باستخدام عوامل المقارنة. لذلك لا يمكن إجراء الفحص باستخدام == أو !=، ويجب استخدام الدوال المخصصة (isnan() أو isna()).
num = float('nan')
print(num == num)  # النتيجة: False

6.2. نقاط مهمة عند تنظيف البيانات

في تحليل البيانات، لا يمكن إجراء حسابات دقيقة إذا ظل NaN موجودًا. لأنه قد يشوه نتائج الحساب، يلزم تنظيف مناسب مسبقًا. من خلال إزالة أو استبدال NaN بشكل مناسب، يمكن تعزيز موثوقية البيانات.

7. ملخص

في بايثون، من خلال الاستفادة من math، numpy، pandas يمكنك تحديد ومعالجة NaN بكفاءة. فهم الطريقة الصحيحة للتعامل مع NaN واكتساب المعرفة الأساسية للحفاظ على موثوقية تحليل البيانات والحسابات العددية هو مهارة مفيدة في جميع مجالات البرمجة.
侍エンジニア塾