我有一个pandas数据帧,看起来像这样:
ImageID | 标签 | caption_text|
---|---|---|
0.JPG | 1 | 穿着泳衣拿着阳伞的女人[/tr>|
1.JPEG | 1 19 | 黑色和银色钟楼[/tr>|
2.JPEG | 8 3 13 | 这张照片显示了人们在山上滑雪 |
由于您已经知道范围为1-19,因此可以执行get_dummies并重新索引:
n=19
arr = df['labels'].str.get_dummies(' ').reindex(map(str,range(1,n+1)),axis=1,fill_value=0)
print(arr)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
2 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0
最后,您可以将其与原始数据帧连接起来:
out = pd.concat((df,arr),axis=1)
只是提供了一种替代方法。您可以对每个标签进行迭代,查看labels
中的值是否包含该标签:
n = 19
for i in range(1, n+1):
df[i] = df['labels'].str.contains(rf'b{i}b').astype(int)