2017-09-21 3 views
1

J'ai un code simple pour convertir des données catégoriques en un seul encodage chaud en python:ne pouvait pas convertir les données catégoriques au nombre OneHotEncoder

a,1,p 
b,3,r 
a,5,t 

J'ai essayé de les convertir avec OneHotEncoder python:

from sklearn.cross_validation import train_test_split 
from sklearn.preprocessing import OneHotEncoder 
import pandas as pd 
import numpy as np 

data = pd.read_csv("C:\\test.txt", sep=",", header=None) 
one_hot_encoder = OneHotEncoder(categorical_features=[0,2]) 
one_hot_encoder.fit(data.values) 

Ce morceau de code ne fonctionne pas et émet une erreur

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

Pouvez-vous s'il vous plaît aider moi?

Répondre

1

Essayez ceci:

from sklearn import preprocessing 

for c in df.columns: 
    df[c]=df[c].apply(str) 
    le=preprocessing.LabelEncoder().fit(df[c]) 
    df[c] =le.transform(df[c]) 
    pd.to_numeric(df[c]).astype(np.float) 
0

@ user3104352,

j'ai rencontré le même comportement et trouvé frustrant.

Scikit-Learn nécessite toutes les données pour être numérique avant même de considérer la sélection des colonnes fournies dans le paramètre categorical_features.

Plus précisément, la sélection de la colonne est traitée par la méthode _transform_selected() dans /sklearn/preprocessing/data.py et la première ligne de cette méthode est

X = check_array(X, accept_sparse='csc', copy=copy, dtype=FLOAT_DTYPES).

Cette vérification échoue si des données dans la donnée X fournie ne peut pas être convertie avec succès en un flottant.

Je reconnais que la documentation de sklearn.preprocessing.OneHotEncoder est très trompeuse à cet égard.