修正方法: 入力に nan、無限大、または dtype ('float64') には大きすぎる値が含まれています


Python の使用時に発生する可能性のある一般的なエラーは次のとおりです。

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

このエラーは通常、scikit-learn モジュールの関数を使用しようとしたときに、入力として使用している DataFrame または行列に NaN 値または無限値が含まれている場合に発生します。

次の例は、このエラーを実際に解決する方法を示しています。

エラーを再現する方法

次のパンダ データフレームがあるとします。

 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 値の両方があるため、エラーが発生します。

エラーを修正する方法

このエラーを解決する方法は、まず、無限値または NaN 値を含むすべての行を DataFrame から削除することです。

 #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 値を含む 2 行が削除されました。

ここで、線形回帰モデルの適合に進むことができます。

 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’ は呼び出し可能ではありません
修正方法: 型エラー: 文字列またはバイト オブジェクトが必要です

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です