Python OneHotEncoder仅包含一个字符串功能

Python OneHotEncoder仅包含一个字符串功能,python,python-3.x,machine-learning,scikit-learn,data-science,Python,Python 3.x,Machine Learning,Scikit Learn,Data Science,我想将我仅有的一项功能转换为单独的二进制功能: df["pattern_id"] Out[202]: 0 3 1 3 ... 7440 2 7441 2 7442 3 Name: pattern_id, Length: 7443, dtype: int64 df["pattern_id"] Out[202]: 0 0 0 1 1 0 0 1 ... 7440 0 1 0 7441

我想将我仅有的一项功能转换为单独的二进制功能:

df["pattern_id"]
Out[202]: 
0       3
1       3
...
7440    2
7441    2
7442    3
Name: pattern_id, Length: 7443, dtype: int64 
df["pattern_id"]
Out[202]: 
0       0 0 1
1       0 0 1
...
7440    0 1 0
7441    0 1 0
7442    0 0 1
Name: pattern_id, Length: 7443, dtype: int64 
我想使用OneHotEncoder,数据为int,因此无需对其进行编码:

onehotencoder = OneHotEncoder(categorical_features=["pattern_id"])
df = onehotencoder.fit_transform(df).toarray()

ValueError: could not convert string to float: 'http://www.zaragoza.es/sedeelectronica/'
有趣的是我收到一个错误。。。sklearn试图编码另一列,而不是我想要的

我们必须将模式id编码为整数值

我使用了这个链接:

我得到了同样的错误。我做错了什么

编辑 资料来源:


如果查看文档,您会发现Category_features参数期望的是“all”或索引数组或掩码,而不是字符串。通过更改为以下行,可以使代码正常工作

import pandas as pd
from sklearn.preprocessing import OneHotEncoder
# Create a dataframe of random ints
df = pd.DataFrame(np.random.randint(0, 4, size=(100, 4)),
                  columns=['pattern_id', 'B', 'C', 'D'])
onehotencoder = OneHotEncoder(categorical_features=[df.columns.tolist().index('pattern_id')])
df = onehotencoder.fit_transform(df)

不过,df将不再是数据帧,我建议直接使用numpy阵列。

您也可以这样做

import pandas as pd
from sklearn.preprocessing import OneHotEncoder
onehotenc = OneHotEncoder()
X = onehotenc.fit_transform(df.required_column.values.reshape(-1, 1)).toarray()
我们需要重塑列的形状,因为fit_变换需要一个二维数组。然后,您可以将列添加到此numpy数组,然后将其与数据帧合并


从这个链接看

我无法更改数据类型,顺便说一句,仍然不起作用您使用的是什么版本的sklearn?我在发布我的答案之前测试了代码,它运行正常。我将用我使用的完整测试扩展我的答案。您不能更改数据类型是什么意思?数据已经在pandas后端的numpy数组中了。除了pattern之外,我还有其他列,我将发布,UpdateConversation变得相当长,我可以转移到下面讨论一下
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
# Create a dataframe of random ints
df = pd.DataFrame(np.random.randint(0, 4, size=(100, 4)),
                  columns=['pattern_id', 'B', 'C', 'D'])
onehotencoder = OneHotEncoder(categorical_features=[df.columns.tolist().index('pattern_id')])
df = onehotencoder.fit_transform(df)
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
onehotenc = OneHotEncoder()
X = onehotenc.fit_transform(df.required_column.values.reshape(-1, 1)).toarray()