Python 3.x 如何对熊猫中的混合字符串和数字单元格值进行热编码?

Python 3.x 如何对熊猫中的混合字符串和数字单元格值进行热编码?,python-3.x,pandas,Python 3.x,Pandas,我有一个数据集,我需要一个热编码不同材料的混合物组成。 “我的数据集”的列如下所示: id Composition 0 ZrB2 - 5% B4C 1 HfB2 - 15% SiC - 3% WC 2 HfB2 - 15% SiC 我需要把它放在以下格式: 0) ZrB2 95 HfB2

我有一个数据集,我需要一个热编码不同材料的混合物组成。 “我的数据集”的列如下所示:

id            Composition 
0             ZrB2 - 5% B4C
1    HfB2 - 15% SiC - 3% WC
2            HfB2 - 15% SiC
我需要把它放在以下格式:

0)
ZrB2                                 95
HfB2                                  0
SiC                                   0
B4C                                   5
WC                                    0
1)
ZrB2                                  0
HfB2                                  82
SiC                                   15
B4C                                   0
WC                                    3
2)
ZrB2                                  0
HfB2                                  85
SiC                                   15
B4C                                   0
WC                                    0
WB                                    0
这不是热编码,而是将字符串列表解析为组成部分

  • 每个组件由“-”分隔
  • 每个组件由百分比和列名两部分组成。构建与这些组成部分匹配的re
  • 列表
    /
    目录
    中,将其放入数据帧中
  • 用于计算未定义列的%age的完整逻辑
  • data=['ZrB2-5%B4C','HfB2-15%SiC-3%WC','HfB2-15%SiC']
    dfhc=pd.DataFrame({“Composition”:data})
    #构建一个dict列表,其中dict的形式为{'ZrB2':-1,'B4C':'5'}
    #如果没有%age,则默认为-1,以后再计算
    parse1=[{tt[1]:tt[0]。如果len(tt[0])>0 else-1,则替换(“%”,“”)
    对于r中的t
    #解析出标记和百分比,排除空元组(re.findall()的默认行为)
    如果x!=(“”,“”)的话,“([0-9]*[%]?[]?)([A-Z,A-Z,0-9]*)”,t)中的tt
    }
    #每列以“-”分隔
    对于dfhc[“组合”]中的r,在[re.split(“-”,r)中表示r。值]
    ]
    df=pd.DataFrame(解析1)
    #数据类型对于sum()的工作非常重要
    df=df.astype({c:np.float64表示df.columns}中的c)
    #其中%年龄未知,默认为-1,将其设置为100-其他COL的总和
    对于df.columns中的c:
    掩码=df[df[c]=-1]。索引
    df.loc[mask,c]=100-df.loc[mask,[cc代表df.columns中的cc,如果cc!=c]].sum(轴=1)
    打印(f“{dfhc.to_string(index=False)}\n\n{df.to_string(index=False)}\n\n{parse1}”)
    
    输出

                Composition
              ZrB2 - 5% B4C
     HfB2 - 15% SiC - 3% WC
             HfB2 - 15% SiC
    
     ZrB2  B4C  HfB2   SiC   WC
     95.0  5.0   NaN   NaN  NaN
      NaN  NaN  82.0  15.0  3.0
      NaN  NaN  85.0  15.0  NaN
    
    [{'ZrB2': -1, 'B4C': '5'}, {'HfB2': -1, 'SiC': '15', 'WC': '3'}, {'HfB2': -1, 'SiC': '15'}]