Cara memperbaiki: input berisi nan, tak terhingga, atau nilai yang terlalu besar untuk dtype ('float64')


Kesalahan umum yang mungkin Anda temui saat menggunakan Python adalah:

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

Kesalahan ini biasanya terjadi ketika Anda mencoba menggunakan fungsi dari modul scikit-learn, tetapi DataFrame atau matriks yang Anda gunakan sebagai input memiliki nilai NaN atau nilai tak terbatas.

Contoh berikut menunjukkan cara mengatasi kesalahan ini dalam praktiknya.

Bagaimana cara mereproduksi kesalahan tersebut

Misalkan kita memiliki panda DataFrame berikut:

 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

Sekarang anggaplah kita mencoba menyesuaikan model regresi linier berganda menggunakan fungsi 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').

Kami menerima kesalahan karena DataFrame yang kami gunakan memiliki nilai tak terbatas dan NaN.

Bagaimana cara memperbaiki kesalahan tersebut

Cara mengatasi kesalahan ini adalah dengan menghapus terlebih dahulu semua baris dari DataFrame yang berisi nilai tak terbatas atau 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

Dua baris dengan nilai tak terhingga atau NaN telah dihapus.

Sekarang kita dapat melanjutkan untuk menyesuaikan model regresi linier kita:

 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]

Perhatikan bahwa kami tidak menerima kesalahan apa pun kali ini karena kami terlebih dahulu menghapus baris dengan nilai tak terbatas atau NaN dari DataFrame.

Sumber daya tambahan

Tutorial berikut menjelaskan cara memperbaiki kesalahan umum lainnya dengan Python:

Cara Memperbaiki dengan Python: Objek ‘numpy.ndarray’ tidak dapat dipanggil
Cara Memperbaiki: TypeError: Objek ‘numpy.float64’ tidak dapat dipanggil
Cara Memperbaiki: Kesalahan Ketik: Objek String atau Bytes yang Diharapkan

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *