كيفية الإصلاح: خطأ القيمة: غير قادر على تحويل float nan إلى int


الخطأ الذي قد تواجهه عند استخدام الباندا هو:

 ValueError : cannot convert float NaN to integer

يحدث هذا الخطأ عند محاولة تحويل عمود في pandas DataFrame من عدد عشري إلى عدد صحيح، عندما يحتوي العمود على قيم NaN.

يوضح المثال التالي كيفية تصحيح هذا الخطأ عمليًا.

كيفية إعادة إنتاج الخطأ

لنفترض أننا أنشأنا DataFrame الباندا التالية:

 import pandas as pd
import numpy as np

#createDataFrame
df = pd. DataFrame ({' points ': [25, 12, 15, 14, 19, 23, 25, 29],
                   ' assists ': [5, 7, 7, 9, 12, 9, 9, 4],
                   ' rebounds ': [11, np. no , 10, 6, 5, np. no , 9, 12]})

#view DataFrame
df

        points assists rebounds
0 25 5 11
1 12 7 NaN
2 15 7 10
3 14 9 6
4 19 12 5
5 23 9 NaN
6 25 9 9
7 29 4 12

في الوقت الحالي، يعد العمود “المرتد” من نوع البيانات “العائمة”.

 #print data type of 'rebounds' column
df[' rebounds ']. dtype

dtype('float64')

لنفترض أننا نحاول تحويل العمود “المرتد” من عدد عشري إلى عدد صحيح:

 #attempt to convert 'rebounds' column from float to integer
df[' rebounds '] = df[' rebounds ']. astype (int)

ValueError : cannot convert float NaN to integer 

نتلقى خطأ ValueError لأنه لا يمكن تحويل قيم NaN الموجودة في عمود “الارتدادات” إلى قيم صحيحة.

كيفية إصلاح الخطأ

طريقة إصلاح هذا الخطأ هي معالجة قيم NaN قبل محاولة تحويل العمود من عدد عشري إلى عدد صحيح.

يمكننا استخدام الكود التالي لتحديد الصفوف التي تحتوي على قيم NaN أولاً:

 #print rows in DataFrame that contain NaN in 'rebounds' column
print (df[df[' rebounds ']. isnull ()])

   points assists rebounds
1 12 7 NaN
5 23 9 NaN

يمكننا بعد ذلك إما إزالة الصفوف ذات قيم NaN أو استبدال قيم NaN بقيمة أخرى قبل تحويل العمود من عدد عشري إلى عدد صحيح:

الطريقة الأولى: إزالة الصفوف التي تحتوي على قيم NaN

 #drop all rows with NaN values
df = df. dropna ()

#convert 'rebounds' column from float to integer
df[' rebounds '] = df[' rebounds ']. astype (int) 

#view updated DataFrame
df
	points assists rebounds
0 25 5 11
2 15 7 10
3 14 9 6
4 19 12 5
6 25 9 9
7 29 4 12

#view class of 'rebounds' column
df[' rebounds ']. dtype

dtype('int64')

الطريقة الثانية: استبدال قيم NaN

 #replace all NaN values with zeros
df[' rebounds '] = df[' rebounds ']. fillna ( 0 )

#convert 'rebounds' column from float to integer
df[' rebounds '] = df[' rebounds ']. astype (int) 

#view updated DataFrame
df

	points assists rebounds
0 25 5 11
1 12 7 0
2 15 7 10
3 14 9 6
4 19 12 5
5 23 9 0
6 25 9 9
7 29 4 12

#view class of 'rebounds' column
df[' rebounds ']. dtype

dtype('int64')

لاحظ أن كلتا الطريقتين تسمحان لنا بتجنب خطأ ValueError وتحويل العمود العائم بنجاح إلى عمود صحيح.

مصادر إضافية

تشرح البرامج التعليمية التالية كيفية إصلاح الأخطاء الشائعة الأخرى في بايثون:

كيفية الإصلاح: تتداخل الأعمدة ولكن لم يتم تحديد أي لاحقة
كيفية الإصلاح: لا يحتوي الكائن “numpy.ndarray” على سمة “إلحاق”.
كيفية الإصلاح: إذا كنت تستخدم جميع القيم العددية، فستحتاج إلى تمرير فهرس

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *