ValueError: Input contains NaN, infinity or a value too large for dtype('float32').の対処


上記のエラーが出た。
以前も遭遇したが対処を忘れて調べ直した。
また困りそうなのでメモメモ。

発生場面

kaggleコンペ参加中に、submission用のtestファイルを
RandomForestClassifierでpredict時に発生した。

エラー内容

ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
訳)指定されたファイルにNaN、無限値、データタイプ(今回はfloat32)にしては大きすぎる値が含まれます。

やったこと

とりあえず

df.info()

データにおかしな点がないかチェックした。
今回は全て必要なデータ数があることが確認できた。

ということは
NaNではなさそう?

次は無限大があればNaNに変更する処理を試した。

#マイナスの無限大もあるので、それも指定
df = df.replace([np.inf, -np.inf], nan)
#再度確認
df.info()

さっきは存在したデータが一つのコラムで減っていた。
つまり、無限大が存在してて、nanに変更されたということ。
ここまでくればもうあと少し!
nanをfillna()を使って平均値で置換した!

df = df[column].fillna(df[column.mean())

解決!!!

まとめ

僕みたいな初心者が少しでも救われることを信じて。。。