كيفية الإصلاح: يحتوي الإدخال على nan أو ما لا نهاية أو قيمة كبيرة جدًا بالنسبة إلى dtype ("float64")


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

 ValueError: Input contains infinity or a value too large for dtype('float64').

يحدث هذا الخطأ عادةً عند محاولة استخدام دالة من وحدة scikit-learn، لكن DataFrame أو المصفوفة التي تستخدمها كمدخل لها قيم NaN أو قيم لا نهائية.

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

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

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

 import pandas as pd
import numpy as np

#createDataFrame
df = pd. DataFrame ({' x1 ': [1, 2, 2, 4, 2, 1, 5, 4, 2, 4, 4],
                   ' x2 ': [1, 3, 3, 5, 2, 2, 1, np.inf, 0, 3, 4],
                   ' y ': [np.nan, 78, 85, 88, 72, 69, 94, 94, 88, 92, 90]})

#view DataFrame
print (df)

    x1 x2 y
0 1 1.0 NaN
1 2 3.0 78.0
2 2 3.0 85.0
3 4 5.0 88.0
4 2 2.0 72.0
5 1 2.0 69.0
6 5 1.0 94.0
7 4 lower 94.0
8 2 0.0 88.0
9 4 3.0 92.0
10 4 4.0 90.0

لنفترض الآن أننا نحاول ملاءمة نموذج الانحدار الخطي المتعدد باستخدام وظائف scikit-Learn :

 from sklearn. linear_model import LinearRegression

#initiate linear regression model
model = LinearRegression()

#define predictor and response variables
x, y = df[[' x1 ', ' x2 ']], df. y

#fit regression model
model. fit (x,y)

#print model intercept and coefficients
print (model. intercept_ , model. coef_ )

ValueError: Input contains infinity or a value too large for dtype('float64').

نتلقى خطأً لأن DataFrame الذي نستخدمه يحتوي على قيم لا نهائية وقيم NaN.

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

تتمثل طريقة حل هذا الخطأ أولاً في إزالة كافة الصفوف من DataFrame التي تحتوي على قيم لا نهائية أو NaN:

 #remove rows with any values that are not finite
df_new = df[np. isfinite (df). all ( 1 )]

#view updated DataFrame
print (df_new)

    x1 x2 y
1 2 3.0 78.0
2 2 3.0 85.0
3 4 5.0 88.0
4 2 2.0 72.0
5 1 2.0 69.0
6 5 1.0 94.0
8 2 0.0 88.0
9 4 3.0 92.0
10 4 4.0 90.0

تمت إزالة السطرين ذوي القيم اللانهائية أو NaN.

يمكننا الآن المتابعة لتناسب نموذج الانحدار الخطي الخاص بنا:

 from sklearn. linear_model import LinearRegression

#initiate linear regression model
model = LinearRegression()

#define predictor and response variables
x, y = df_new[[' x1 ', ' x2 ']], df_new. y

#fit regression model
model. fit (x,y)

#print model intercept and coefficients
print (model. intercept_ , model. coef_ )

69.85144124168515 [5.72727273 -0.93791574]

لاحظ أننا لا نتلقى أي أخطاء هذه المرة لأننا قمنا أولاً بإزالة الصفوف ذات القيم اللانهائية أو قيم NaN من DataFrame.

مصادر إضافية

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

كيفية الإصلاح في Python: الكائن “numpy.ndarray” غير قابل للاستدعاء
كيفية الإصلاح: خطأ في الكتابة: الكائن “numpy.float64” غير قابل للاستدعاء
كيفية الإصلاح: خطأ في الكتابة: كائن السلسلة أو البايتات المتوقعة

Add a Comment

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