2017-06-05 2 views
1

sklearnホットエンコーダを使用している州でホットエンコーディングを実行しようとしています。sklearnを使用している州の1つのホットエンコーディング

State 
0 FL 
1 CA 
2 MD 
3 NY 
4 NY 
5 NY 
6 NY 

は私が書いた:ここに私のパンダのデータフレームです

from sklearn.preprocessing import OneHotEncoder 

enc=OneHotEncoder(sparse=False) 
enc.fit(data) 

そして、ここでエラーです:私は理解していない

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-78-a0b336acd757> in <module>() 
----> 1 enc.fit(data) 

/anaconda/envs/env3_insight/lib/python3.6/site-packages/sklearn/preprocessing/data.py in fit(self, X, y) 
    1842   self 
    1843   """ 
-> 1844   self.fit_transform(X) 
    1845   return self 
    1846 

/anaconda/envs/env3_insight/lib/python3.6/site-packages/sklearn/preprocessing/data.py in fit_transform(self, X, y) 
    1900   """ 
    1901   return _transform_selected(X, self._fit_transform, 
-> 1902         self.categorical_features, copy=True) 
    1903 
    1904  def _transform(self, X): 

/anaconda/envs/env3_insight/lib/python3.6/site-packages/sklearn/preprocessing/data.py in _transform_selected(X, transform, selected, copy) 
    1695  X : array or sparse matrix, shape=(n_samples, n_features_new) 
    1696  """ 
-> 1697  X = check_array(X, accept_sparse='csc', copy=copy, dtype=FLOAT_DTYPES) 
    1698 
    1699  if isinstance(selected, six.string_types) and selected == "all": 

/anaconda/envs/env3_insight/lib/python3.6/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator) 
    380          force_all_finite) 
    381  else: 
--> 382   array = np.array(array, dtype=dtype, order=order, copy=copy) 
    383 
    384   if ensure_2d: 

ValueError: could not convert string to float: 'NY' 

。私は、ホットエンコーディングを行うことの全体的なポイントは、しばしば文字列の情報を数値に変換することだと考えました...なぜ文字列を浮動小数点に変換できないと言っていますか?

+0

data = pd.DataFrame(['FL','CA','MD','NY','NY','NY','NY'], columns= ['State']) pd.get_dummies(data.State) 

はになります。 – ayhan

+0

OneHotEncoderは、[documentation suggests](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html)のように、数値データのみを受け入れます。最初に、 'FL'の場合は1、 'CA'の場合は2など、いくつかの数値を割り当ててからOneHotEncodingを使用します。文字列を数値に変換するには、@ayhanの提案にしたがってLabelEncoderを使用します。 –

答えて

0

パンダのデータフレームには、get_dummies methodを使用して1つのホットエンコーディングを作成する組み込みオプションがあります。あなたの例では

:あなたが最初のLabelEncoderを使用する必要が

CA FL MD NY

0 0 1 0 0

1 1 0 0 0

2 0 0 1 0

3 0 0 0 1

4 0 0 0 1

5 0 0 0 1

6 0 0 0 1

関連する問題