gpt4 book ai didi

python - MultiLabelBinarizer 以字母而不是类别输出类

转载 作者:行者123 更新时间:2023-12-05 05:15:46 32 4
gpt4 key购买 nike

我有一个数据框,其中一列是 short_namesshort_names 由 2-5 个字母组成 => BG,OP,LE,WELLC。每行可以有任意数量的名称。

我正在尝试使用 MultiLabelBinarizer 将名称转换为单独的列,这样如果行具有相似的名称,那么列中将有 1

one_hot = MultiLabelBinarizer()
one_hot.fit_transform(df['short_name'])
one_hot.classes__

因为其中一行中有一个 '-' 导致错误 TypeError: 'float' object is not iterable,我使用了

df['short_names']= df['short_names'].astype(str)

现在的问题是类输出是字母而不是短名称,即 ABC 而不是 BG OP

最佳答案

我认为需要dropna删除missing valuessplit如有必要:

df = pd.Series({0: np.nan, 1: 'CE', 2: 'NPP', 4: 'SE, CB, CBN, OOM, BCI', 5: 'RCS'})
.to_frame('short_name')
print (df)
short_name
0 NaN
1 CE
2 NPP
4 SE, CB, CBN, OOM, BCI
5 RCS

from sklearn.preprocessing import MultiLabelBinarizer
one_hot = MultiLabelBinarizer()
a = one_hot.fit_transform(df['short_name'].dropna().str.split(', '))
print (a)
[[0 0 0 1 0 0 0 0]
[0 0 0 0 1 0 0 0]
[1 1 1 0 0 1 0 1]
[0 0 0 0 0 0 1 0]]

print(one_hot.classes_ )
['BCI' 'CB' 'CBN' 'CE' 'NPP' 'OOM' 'RCS' 'SE']

如果要输出DataFrame:

df = pd.DataFrame(a, columns=one_hot.classes_ )
print (df)
BCI CB CBN CE NPP OOM RCS SE
0 0 0 0 1 0 0 0 0
1 0 0 0 0 1 0 0 0
2 1 1 1 0 0 1 0 1
3 0 0 0 0 0 0 1 0

另一种解决方案是用 fillna 替换 缺失值 :

from sklearn.preprocessing import MultiLabelBinarizer
one_hot = MultiLabelBinarizer()
a = one_hot.fit_transform(df['short_name'].fillna('missing').str.split(', '))
print (a)
[[0 0 0 0 0 0 0 0 1]
[0 0 0 1 0 0 0 0 0]
[0 0 0 0 1 0 0 0 0]
[1 1 1 0 0 1 0 1 0]
[0 0 0 0 0 0 1 0 0]]

print(one_hot.classes_ )
['BCI' 'CB' 'CBN' 'CE' 'NPP' 'OOM' 'RCS' 'SE' 'missing']

df = pd.DataFrame(a, columns=one_hot.classes_ )
print (df)
BCI CB CBN CE NPP OOM RCS SE missing
0 0 0 0 0 0 0 0 0 1
1 0 0 0 1 0 0 0 0 0
2 0 0 0 0 1 0 0 0 0
3 1 1 1 0 0 1 0 1 0
4 0 0 0 0 0 0 1 0 0

关于python - MultiLabelBinarizer 以字母而不是类别输出类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51335535/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com