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