2016-09-14 75 views
2

我已標記的數據,我需要應用一個熱編碼:'786.2''ICD-9-CM|786.2''ICD-9-CM''786.2b|V13.02''V13.02''279.12''ICD-9-CM|V42.81'是標籤。 |表示該文檔同時具有2個標籤。所以我寫了這樣的代碼:get_dummies分割字符

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這樣分開?

回答

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 
+0

是的,你是對的。 – jezrael

+0

@piRSquared - 謝謝。 – jezrael

+0

你的答案很好 – ngoduyvu