Як виправити: вхідні дані містять nan, нескінченність або значення, завелике для dtype ('float64')
Поширена помилка, з якою ви можете зіткнутися під час використання Python:
ValueError: Input contains infinity or a value too large for dtype('float64').
Ця помилка зазвичай виникає, коли ви намагаєтеся використати функцію з модуля scikit-learn, але DataFrame або матриця, які ви використовуєте як вхідні дані, мають значення NaN або нескінченні значення.
У наступному прикладі показано, як вирішити цю помилку на практиці.
Як відтворити помилку
Припустімо, що у нас є наступні pandas 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:
Як виправити в Python: об’єкт «numpy.ndarray» не можна викликати
Як виправити: TypeError: Об’єкт ‘numpy.float64’ не можна викликати
Як виправити: помилка типу: очікуваний рядок або об’єкт Bytes