目次
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 واكتساب المعرفة الأساسية للحفاظ على موثوقية تحليل البيانات والحسابات العددية هو مهارة مفيدة في جميع مجالات البرمجة.