我有需要应用 one-hot-encoding 的标记数据:'786.2'
、'ICD-9-CM|786.2'
、' ICD-9-CM'
、'786.2b|V13.02'
、'V13.02'
、'279.12'
, 'ICD-9-CM|V42.81'
是标签。 |
表示文档同时有 2 个标签。所以我写了这样的代码:
labels = np.asarray(label_docs)
labels = np.array([u'786.2', u'ICD-9-CM|786.2', u'|ICD-9-CM', u'786.2b|V13.02', u'V13.02', u'279.12', u'ICD-9-CM|V42.81|'])
df = pd.DataFrame(labels, columns=['label'])
labels = df['label'].str.get_dummies(sep='|')
结果:
279.12 786.2 786.2b ICD-9-CM V13.02 V42.81
0 0 1 0 0 0 0
1 0 1 0 1 0 0
2 0 0 0 1 0 0
3 0 0 1 0 1 0
4 0 0 0 0 1 0
5 1 0 0 0 0 0
6 0 0 0 1 0 1
但是,现在我只需要每个文档有 1 个标签:
'ICD-9-CM|786.2'
是'ICD-9-CM'
,
“ICD-9-CM|V42.81|”
是 “ICD-9-CM”
。
我怎样才能像这样通过 get_dummies
进行分离?
最佳答案
我认为你需要str.strip
和 str.split
然后通过 str[0]
选择列表的第一项:
print (df.label.str.strip('|').str.split('|').str[0])
0 786.2
1 ICD-9-CM
2 ICD-9-CM
3 786.2b
4 V13.02
5 279.12
6 ICD-9-CM
Name: label, dtype: object
labels = df.label.str.strip('|').str.split('|').str[0].str.get_dummies()
print (labels)
279.12 786.2 786.2b ICD-9-CM V13.02
0 0 1 0 0 0
1 0 0 0 1 0
2 0 0 0 1 0
3 0 0 1 0 0
4 0 0 0 0 1
5 1 0 0 0 0
6 0 0 0 1 0
如果索引为 2
的行不需要值,则删除 str.strip
:
print (df.label.str.split('|').str[0])
0 786.2
1 ICD-9-CM
2
3 786.2b
4 V13.02
5 279.12
6 ICD-9-CM
Name: label, dtype: object
labels = df.label.str.split('|').str[0].str.get_dummies(sep='|')
print (labels)
279.12 786.2 786.2b ICD-9-CM V13.02
0 0 1 0 0 0
1 0 0 0 1 0
2 0 0 0 0 0
3 0 0 1 0 0
4 0 0 0 0 1
5 1 0 0 0 0
6 0 0 0 1 0
关于python - get_dummies 分割字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39483546/