get_dummies分裂字符

时间:2016-09-14 06:10:18

标签: python pandas one-hot-encoding

我标记的数据需要应用单热编码:'786.2''ICD-9-CM|786.2''ICD-9-CM''786.2b|V13.02''V13.02',{{ 1}},'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 'ICD-9-CM|786.2'

'ICD-9-CM''ICD-9-CM|V42.81|'

我怎么能按'ICD-9-CM'分开呢?

1 个答案:

答案 0 :(得分:4)

我认为您需要str.stripstr.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