无法将分类数据转换为数字 OneHotEncoder

could not convert categorical data to number OneHotEncoder

我有一个简单的代码可以将分类数据转换为 python 中的一种热编码:

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

我尝试用 python OneHotEncoder:

转换它们
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)

这段代码不起作用并抛出错误

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

你能帮帮我吗?

试试这个:

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)

@user3104352,

我遇到了同样的行为,觉得很沮丧。

Scikit-Learn 甚至在考虑选择 categorical_features 参数中提供的列之前,要求 所有 数据都是数字。

具体来说,列选择由 /sklearn/preprocessing/data.py 中的 _transform_selected() 方法处理,该方法的第一行是

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

如果提供的数据帧 X 中的 任何 数据无法成功转换为浮点数,则此检查失败。

我同意 sklearn.preprocessing.OneHotEncoder 的文档在这方面具有很强的误导性。