20
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

scikit-learn の "ValueError: Input contains NaN, infinity or a value too large for dtype('float64')." への対処方法

scikit-learn の StandardScaler を使用してデータの標準化を行う際、下記のエラーが出ることがある。

input
from sklearn.preprocessing import StandardScaler

# 訓練データ( pandas.DataFrame 型)
X = training_data()

# 標準化
sc = StandardScaler()
sc.fit(X)
output
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

これを避けるためには、入力データからNaNや無限大を除去する必要がある。

例えば、下記のコードでXからNaNを一つでも含む列を削除できる。

# X から NaN を含む列を削除する
X.drop(X.columns[np.isnan(X).any()], axis=1)

各機能説明

  • np.isnan(X): NaNの要素はTrue、その他の要素はFalseの行列を得る
  • np.isnan(X).any(): NaNを含む列はTrue、その他の列はFalseのリストを得る
  • X.columns[np.isnan(X).any()]: NaNを含む列名を得る
  • X.drop('col', axis=1): Xから列名がcolの列を削除する
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
20
Help us understand the problem. What are the problem?