【问题标题】:get_dummies split characterget_dummies 拆分字符
【发布时间】:2016-09-14 06:10:17
【问题描述】:

我有标记的数据,我需要应用单热编码:'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 分开?

【问题讨论】:

    标签: python pandas one-hot-encoding


    【解决方案1】:

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

    【讨论】:

    • @piRSquared - 谢谢。
    • 你的回答很棒
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 2010-10-28
    相关资源
    最近更新 更多