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()