将单列分类的 numpy 数组/熊猫数据帧转换为多列布尔矩阵(每种分类类型一列)



我想转换这样的东西:

['dog', 'cat', 'fish', 'dog', 'dog', 'bird', 'cat', 'bird']

变成布尔矩阵,矩阵中每个分类都有一列。对于此示例,它将如下所示:

(dog) (cat) (fish) (bird)
1     0      0     0
0     1      0     0
0     0      1     0
1     0      0     0
1     0      0     0
0     0      0     1 
0     1      0     0
0     0      0     1  

其中,该值设置为 true,具体取决于分类。我知道我可以像这样迭代地执行此操作(伪代码):

class = array of classifications
new = array of size [amt of classifications, len(class)]
for i, c in enumerate(class):
if c == 'dog':
new[i][0] = 1
elif c == 'cat':
new[i][1] = 1
# and so on

我觉得在 numpy 或 pandas 中有更有效的方法(因为我最初将数据作为数据帧转换为 numpy 数组,所以我不介意有一个熊猫解决方案)。

使用接受listget_dummies

a = ['dog', 'cat', 'fish', 'dog', 'dog', 'bird', 'cat', 'bird']
df = pd.get_dummies(a)
print (df)
bird  cat  dog  fish
0     0    0    1     0
1     0    1    0     0
2     0    0    0     1
3     0    0    1     0
4     0    0    1     0
5     1    0    0     0
6     0    1    0     0
7     1    0    0     0

如果列的排序很重要,请添加带有uniquereindex

df = pd.get_dummies(a).reindex(columns=pd.unique(a))
print (df)
dog  cat  fish  bird
0    1    0     0     0
1    0    1     0     0
2    0    0     1     0
3    1    0     0     0
4    1    0     0     0
5    0    0     0     1
6    0    1     0     0
7    0    0     0     1

最新更新