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

How to transform categorical column using one hot encoder in sklearn

我有一个带有分类列的数据框,我正在尝试 one hot encode 使用下面的代码片段 sklearn

oneEncoder= OneHotEncoder()
features['COL2'] = features['COL2'].apply(lambda col :  oneEncoder.fit_transform(col))

但它一直在抛出 ValueError: Expected 2D array, got scalar array instead: array=1771. Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

我也试过了

oneEncoder= OneHotEncoder() #initializing an object of class LabelEncoder
oneEncoder.fit_transform( features['COL2'])

但它抛出 ValueError: Expected 2D array, got 1D array instead:

你可以直接做

categories = pd.get_dummies(features['COL2'])

否则你可以传递一个二维数组

oneEncoder.fit_transform( features[['COL2']].values)

尝试:

oneEncoder.fit_transform(df[["Col2"]]).todense()

假设我们有:

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

然后:

oneEncoder= OneHotEncoder()
oneEncoder.fit_transform(features[["Col2"]]).todense()
matrix([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]])

如果您正在处理一个 Series 对象,您可能希望重塑它:

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

毫不奇怪,它们是您按字母顺序排列的唯一输入。