LoginSignup
26
23

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-02-17

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の列を削除する
26
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
23