Python 将字符串数据转换为决策树的数字

Python 将字符串数据转换为决策树的数字,python,pandas,scikit-learn,classification,decision-tree,Python,Pandas,Scikit Learn,Classification,Decision Tree,我正在尝试将几列字符串数据转换为数字,以输入分类模型。具有一个修改列的示例数据集为: 输入: 输出: 我意识到scikit learn不能很好地处理字符串数据,但现在我真的更愿意继续使用它,如果可能的话。然而,我的问题是如果我使用 sklearn.preprocessing.LabelEncoder 我可以使用“.classes_ux”获取一些数值,例如: 输入: 我明白了 输出: 因为这个数组只包含三个值,所以我不能使用 数据['Name']=VAL 用于分配,因为我的列长度为4,VAL长

我正在尝试将几列字符串数据转换为数字,以输入分类模型。具有一个修改列的示例数据集为:

输入:

输出:

我意识到scikit learn不能很好地处理字符串数据,但现在我真的更愿意继续使用它,如果可能的话。然而,我的问题是如果我使用

sklearn.preprocessing.LabelEncoder 
我可以使用“.classes_ux”获取一些数值,例如:

输入:

我明白了

输出:

因为这个数组只包含三个值,所以我不能使用

数据['Name']=VAL

用于分配,因为我的列长度为4,VAL长度为3

考虑到这一点,在scikit learn中是否有其他方法可以实现这一点,或者是我使用其他库的唯一选择?

尝试以下方法:

le = preprocessing.LabelEncoder()
data['Name']= le.fit_transform(data['Name'])

这将为整个列指定标签。

您也可以这样做:

pd.get_dummies(data=data, columns=['Name'])
输出:

  Age  Name_juli  Name_nick  Name_tom
0  10          0          0         1
1  15          0          1         0
2  14          1          0         0
3  12          0          1         0
现在,您的数据已准备好进行模型培训。通常,OneHot编码比LabelEncoding好,因为LabelEncoding意味着名字之间存在数字关系。如果Juli==0,Nick==1,Tom==2,则表示July
le = preprocessing.LabelEncoder()
le.fit(data['Name'])
le.classes_
vals = le.transform(data['Name'])
vals
使用fitdata['Name']时,实际上可以使用fitdata['Name']。唯一,因为只有唯一的值用于拟合,但对于转换,必须使用所有数据

from sklearn.preprocessing import Imputer

imputer =Imputer(missing_values="NaN", strategy='mean', axis=0)

imputer=imputer.fit(X[:,1:3])

X[:,1:3]= imputer.transform(X[:,1:3])

#Concept of Dummy Variable, Handling the conflict of them

from sklearn.preprocessing import LabelEncoder, OneHotEncoder

labelencoder_X = LabelEncoder()
#We have to give the column number necessary to change it in numeric form
X[:,0]=labelencoder_X.fit_transform(X[:,0])
在此处输入代码准备输入功能

# prepare input features
def LABEL_Encoding(X):
    objList = data.select_dtypes(include = "object").columns
    print (objList)
    le = LabelEncoder()
    for feat in objList:
        data[feat] = le.fit_transform(data[feat].astype(str))

    return data


vals=le.transformdata['Name']我同意此任务的一种热编码,但也值得一提的是本机sklearn,它可以更容易地在sklearn生态系统中使用啊,谢谢。我最近确实知道你不想要一个隐含的命令,但我有点回过头来,根据我的阅读,我认为get_dummies不是OneHot,而Labelencoded是。谢谢你的更正。那么,如果我需要对数据集中的多个列执行此操作,这个过程会改变吗?我猜不会,因为这只是使用一个布尔值?这只是给我的数据集添加了一些额外的特性。我的理解正确吗?对我来说,pandas更简单,但如果你正在构建管道,那么最好使用OneHotEncoder。如果您想添加更多的列,请将它们添加到columns=['Name']列表中,这很容易,您会自动获得一个更新的数据帧
  Age  Name_juli  Name_nick  Name_tom
0  10          0          0         1
1  15          0          1         0
2  14          1          0         0
3  12          0          1         0
le = preprocessing.LabelEncoder()
le.fit(data['Name'])
le.classes_
vals = le.transform(data['Name'])
vals
from sklearn.preprocessing import Imputer

imputer =Imputer(missing_values="NaN", strategy='mean', axis=0)

imputer=imputer.fit(X[:,1:3])

X[:,1:3]= imputer.transform(X[:,1:3])

#Concept of Dummy Variable, Handling the conflict of them

from sklearn.preprocessing import LabelEncoder, OneHotEncoder

labelencoder_X = LabelEncoder()
#We have to give the column number necessary to change it in numeric form
X[:,0]=labelencoder_X.fit_transform(X[:,0])
onehotencoder=OneHotEncoder(categorical_features =[0])

X=onehotencoder.fit_transform(X).toarray()
# prepare input features
def LABEL_Encoding(X):
    objList = data.select_dtypes(include = "object").columns
    print (objList)
    le = LabelEncoder()
    for feat in objList:
        data[feat] = le.fit_transform(data[feat].astype(str))

    return data