Pandas 如何在sklearn中使用一个热编码器转换分类列
我有一个带有分类列的数据框,我正在尝试使用下面的snippit对它进行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)。如
one hot encode
itsklearn
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)]