Nasıl düzeltilir? giriş nan, sonsuzluk veya dtype için çok büyük bir değer içeriyor ('float64')


Python kullanırken karşılaşabileceğiniz yaygın bir hata:

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

Bu hata genellikle scikit-learn modülünden bir fonksiyonu kullanmaya çalıştığınızda ortaya çıkar ancak giriş olarak kullandığınız DataFrame veya matrisin NaN değerleri veya sonsuz değerleri vardır.

Aşağıdaki örnekte bu hatanın pratikte nasıl çözüleceği gösterilmektedir.

Hata nasıl yeniden oluşturulur?

Aşağıdaki pandalara sahip olduğumuzu varsayalım 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

Şimdi scikit-learn fonksiyonlarını kullanarak çoklu doğrusal regresyon modeline uymaya çalıştığımızı varsayalım:

 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').

Kullandığımız DataFrame’in hem sonsuz hem de NaN değerleri olmasından dolayı hata alıyoruz.

Hata nasıl düzeltilir?

Bu hatayı çözmenin yolu öncelikle sonsuz veya NaN değerleri içeren tüm satırları DataFrame’den kaldırmaktır:

 #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

Sonsuz veya NaN değerine sahip iki satır kaldırıldı.

Artık doğrusal regresyon modelimize uymaya devam edebiliriz:

 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]

Öncelikle DataFrame’den sonsuz veya NaN değerli satırları kaldırdığımız için bu sefer herhangi bir hata almadığımızı unutmayın.

Ek kaynaklar

Aşağıdaki eğitimlerde Python’daki diğer yaygın hataların nasıl düzeltileceği açıklanmaktadır:

Python’da Nasıl Düzeltilir: ‘numpy.ndarray’ nesnesi çağrılabilir değil
Nasıl düzeltilir: TypeError: ‘numpy.float64’ nesnesi çağrılabilir değil
Nasıl Onarılır: Tür Hatası: Beklenen Dize veya Bayt Nesnesi

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir