我有一个带有所有功能和标签的Pandas DataFrame。我的功能之一是分类,需要进行一次热编码。
该功能是整数,并且只能包含的值 0 to 4
要将这些数组保存回我的DataFrame中,请使用以下代码
# enc is my OneHotEncoder object
df['mycol'] = df['mycol'].map(lambda x: enc.transform(x).toarray())
我的DataFrame有超过一百万行,因此上面的代码要花一些时间。是否有更快的方法将数组分配给DataFrame单元?因为我只有5个类别,所以我不需要调用该transform()
函数一百万次。
我已经尝试过类似的东西
num_categories = 5
i = 0
while (i<num_categories):
df.loc[df['mycol'] == i, 'mycol'] = enc.transform(i).toarray()
i += 1
这产生这个错误
ValueError: Must have equal len keys and value when setting with an ndarray
您可以使用pd.get_dummies:
>>> s
0 a
1 b
2 c
3 a
dtype: object
>>> pd.get_dummies(s)
a b c
0 1 0 0
1 0 1 0
2 0 0 1
3 1 0 0
或者:
>>> from sklearn.preprocessing import OneHotEncoder
>>> enc = OneHotEncoder()
>>> a = np.array([1, 1, 3, 2, 2]).reshape(-1, 1)
>>> a
array([[1],
[1],
[3],
[2],
[2]]
>>> one_hot = enc.fit_transform(a)
>>> one_hot.toarray()
array([[ 1., 0., 0.],
[ 1., 0., 0.],
[ 0., 0., 1.],
[ 0., 1., 0.],
[ 0., 1., 0.]])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句