Python labelencoder和OneHotEncoder的值错误

Python labelencoder和OneHotEncoder的值错误,python,pandas,scikit-learn,data-mining,data-analysis,Python,Pandas,Scikit Learn,Data Mining,Data Analysis,我试图将一个分类字符串列转换为几个伪变量二进制列,但得到一个valueerror 代码如下: import sys, os import numpy as np import matplotlib.pyplot as plt import pandas as pd from dateutil import parser import math import traceback import logging datasetMod = pd.read_csv('data.csv') X = dat

我试图将一个分类字符串列转换为几个伪变量二进制列,但得到一个valueerror

代码如下:

import sys, os
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from dateutil import parser
import math
import traceback
import logging
datasetMod = pd.read_csv('data.csv')

X = datasetMod.iloc[:, 3:6].values
y = datasetMod.iloc[:, 1].values
print(X[:, 0])

# Encoding categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
try:
    labelencoder_X = LabelEncoder()
    X[:, 0] = labelencoder_X.fit_transform(X[:, 0])
    onehotencoder = OneHotEncoder(categorical_features = [0])
    X = onehotencoder.fit_transform(X).toarray()
except Exception as e:
    exc_type, exc_obj, exc_tb = sys.exc_info()
    fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
    print(exc_type, fname, exc_tb.tb_lineno)
以下是错误:

<class 'ValueError'> multipleLinearRegression.py 23
字符串本身似乎没有任何问题,中间没有空格,也没有类似数字的符号。所以我不明白为什么我得到一个valuetype不能将字符串转换为浮点错误

任何帮助都将不胜感激

更新

onehotencoder现在工作得有点好,但最终的结果是object类型,而它应该是float64类型:

labelencoder_X = LabelEncoder()
X[:, 1] = labelencoder_X.fit_transform(X[:, 1])
X[:, 2] = labelencoder_X.fit_transform(X[:, 2])
X[:, 3] = labelencoder_X.fit_transform(X[:, 3])
onehotencoder = OneHotEncoder(categorical_features = [1,2,3])
onehotencoder.fit(X[:, 1])
onehotencoder.fit(X[:, 2])
onehotencoder.fit(X[:, 3])
onehotencoder.transform(X[:, 1])
onehotencoder.transform(X[:, 2])
onehotencoder.transform(X[:, 3])
X = onehotencoder.toArray()  
更新2

from sklearn.preprocessing import LabelEncoder, OneHotEncoder

labelencoder_X = LabelEncoder()
X[:, 1] = labelencoder_X.fit_transform(X[:, 1])
X[:, 2] = labelencoder_X.fit_transform(X[:, 2])
X[:, 3] = labelencoder_X.fit_transform(X[:, 3])

onehotencoder = OneHotEncoder(categorical_features = [1,2,3])
X[:, 1] = onehotencoder.fit_transform(X[:, 1]).toarray()
X[:, 2] = onehotencoder.fit_transform(X[:, 2]).toarray()
X[:, 3] = onehotencoder.fit_transform(X[:, 3]).toarray()

print(X.dtype) #object
最终代码

由于
categorical\u特性
已经指定了索引,因此我可以在整个矩阵
X
上拟合\u transform()。感谢@mkos的耐心

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 1] = labelencoder_X.fit_transform(X[:, 1])
X[:, 2] = labelencoder_X.fit_transform(X[:, 2])
X[:, 3] = labelencoder_X.fit_transform(X[:, 3])
onehotencoder = OneHotEncoder(categorical_features = [1,2,3])
X = onehotencoder.fit_transform(X)

这应该可以做到:

onehotencoder = OneHotEncoder(categorical_features = [1,2,3])
X = onehotencoder.fit_transform(X)
您可以通过以下方式打印:

print(X.toArray())

X
作为稀疏矩阵并不坏,因为这样可以节省内存。如果你想看到它,那么你可以用
toArray()

尝试
le.fit(X[:,0].unique())
then
le.transform(X[:,0])
我按照你的建议将它们和它的一个hotcoder.fit(X[:,0].unique()分开,如果我删除unique(),它会工作,只需一个弃用警告“如果您的数据具有单个特征,请使用X.RESUPATE(-1,1)重塑您的数据;如果数据包含单个样本,请使用X.RESUPATE(1,-1)重塑数据。”
le
mean
LabelEncoder
这需要
unique
OneHotEncoder
Don needs如果给它一个valuetypeerror againCheers,我如何使它成为float64类型?它仍然默认为object类型。(X我的意思是)ye,仍然会生成objecthmm类型,如果我不在onehotencoder fit_transform()的末尾添加一个.toarray(),那么我的值就会变成:“如果我可以问的话,你到底是如何检查类型的?spyder中的变量资源管理器?”
print(X.toArray())