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
这不是热编码,而是将字符串列表解析为组成部分
列表
/目录
中,将其放入数据帧中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'}]