2016-04-23 54 views
9

私はラベルエンコーダを使用して、カテゴリデータを数値に変換しています。ラベルエンコーダのエンコーディングの欠損値

LabelEncoderは欠損値をどのように処理しますか?

from sklearn.preprocessing import LabelEncoder 
import pandas as pd 
import numpy as np 
a = pd.DataFrame(['A','B','C',np.nan,'D','A']) 
le = LabelEncoder() 
le.fit_transform(a) 

は出力:

array([1, 2, 3, 0, 4, 1]) 

上記の例では、ラベルエンコーダは、カテゴリにNaN値を変更しました。どのカテゴリが欠損値を表しているかはどのようにわかりますか?

答えて

4

値のないLabelEncoderは使用しないでください。あなたが使用しているscikit-learnのバージョンはわかりませんが、0.17.1ではコードはTypeError: unorderable types: str() > float()になります。

表示されているように、in the sourceは、符号化するデータに対してnumpy.uniqueを使用します。値が見つからない場合はTypeErrorになります。あなたが不足している値をエンコードしたい場合は、最初の文字列にその種類を変更:

a[pd.isnull(a)] = 'NaN' 
+0

だから、ダミーの値として「はNaNを」コーディングすることでしょうか?私は同じ問題を抱えていますが、線形回帰に帰属する値を使用します。 –

0

私は同じ問題に直面したが、上記のどれも私のために働いていません。そこで、 "nan"のみからなるトレーニングデータに新しい行を追加しました。

1

naを値で埋めることができ、後でデータフレーム列の型を文字列に変更して動作させることができます。

from sklearn.preprocessing import LabelEncoder 
import pandas as pd 
import numpy as np 
a = pd.DataFrame(['A','B','C',np.nan,'D','A']) 
a.fillna(99) 
le = LabelEncoder() 
le.fit_transform(a.astype(str)) 
2

こんにちは、私は自分の仕事のためにやった少し計算ハック:

from sklearn.preprocessing import LabelEncoder 
import pandas as pd 
import numpy as np 
a = pd.DataFrame(['A','B','C',np.nan,'D','A']) 
le = LabelEncoder() 
### fit with the desired col, col in position 0 for this example 
fit_by = pd.Series([i for i in a.iloc[:,0].unique() if type(i) == str]) 
le.fit(fit_by) 
### Set transformed col leaving np.NaN as they are 
a["transformed"] = fit_by.apply(lambda x: le.transform([x])[0] if type(x) == str else x) 
+0

'fit_by'はリストですが、リストには' .apply() 'メソッドがありません。 – gboffi

関連する問題