Pandas 如何在sklearn中使用一个热编码器转换分类列

Pandas 如何在sklearn中使用一个热编码器转换分类列,pandas,scikit-learn,one-hot-encoding,Pandas,Scikit Learn,One Hot Encoding,我有一个带有分类列的数据框,我正在尝试使用下面的snippit对它进行one hot encodeitsklearn oneEncoder= OneHotEncoder() features['COL2'] = features['COL2'].apply(lambda col : oneEncoder.fit_transform(col)) 但它一直在扔 ValueError:应为2D数组,而为标量数组: 数组=1771。使用数组重塑数据。如果数据具有单个特征或数组,则重塑(-1,1)。如

我有一个带有分类列的数据框,我正在尝试使用下面的snippit对它进行
one hot encode
it
sklearn

oneEncoder= OneHotEncoder()
features['COL2'] = features['COL2'].apply(lambda col :  oneEncoder.fit_transform(col))
但它一直在扔
ValueError:应为2D数组,而为标量数组:
数组=1771。使用数组重塑数据。如果数据具有单个特征或数组,则重塑(-1,1)。如果数据包含单个样本,则重塑(1,-1)。

我也试过了

oneEncoder= OneHotEncoder() #initializing an object of class LabelEncoder
oneEncoder.fit_transform( features['COL2'])
但它会抛出
ValueError:应为2D数组,但改为1D数组:

您可以直接执行

categories = pd.get_dummies(features['COL2'])
否则,可以传递一个二维数组

oneEncoder.fit_transform( features[['COL2']].values)
尝试:

假设我们有:

features = pd.DataFrame({"Col2":["a","b","c"]})
然后:

如果您处理的是
系列
对象,您可能希望对其进行重塑:

oneEncoder.fit_transform(features.Col2.values.reshape(-1,1)).todense()
matrix([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]])
删除
todense()
方法将在稀疏矩阵中保留变换

最后,您可以通过以下方式解码矩阵列的含义:

oneEncoder.categories_
[array(['a', 'b', 'c'], dtype=object)]

不出所料,它们是按字母顺序排列的唯一输入。

您无法重新分配给
Col2
,因为
OHE
转换是多维的。我选择使用
onecoder.fit_transform(features.Col2.values.reforme(-1,1)).todense()
但当我尝试打印值时,它打印的是旧的分类值,而不是您需要包含的新值。我采用了第二种方法。。。但是当我打印列值时,它打印的是分类值,而不是
OHE
表示
oneEncoder.fit_transform(features.Col2.values.reshape(-1,1)).todense()
matrix([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]])
oneEncoder.categories_
[array(['a', 'b', 'c'], dtype=object)]