同一单元格上具有多个 类 的列的 Sklearn 编码

Sklearn encoding on columns with multiple classes on same cell

假设我有以下 DataFrame:

   Column
0  A - B - C
1      A - B
2      A - C
3          A
4          B
5          C

我想对“列”进行编码,但我在同一个单元格中有多个 类。使用 pandas 我可以执行以下操作以获得正确的编码输出:

df['Column'].str.get_dummies(sep=' - ')

   A  B  C
0  1  1  1
1  1  1  0
2  1  0  1
3  1  0  0
4  0  1  0
5  0  0  1

如何使用 Sklearn 进行相同的转换?

另一种方法是使用 MultiLabelBinarizer class,因为它支持将可迭代对象作为输入。

df['Column'] = df['Column'].str.split(' - ')
enc = MultiLabelBinarizer()
enc.fit_transform(df['Column'])

看起来你可以通过 CountVectorizer 指定你想要如何识别边界来做到这一点。

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
df = pd.DataFrame({'Column': ['A - B - C', 'A - B', 'A - C', 'A', 'B', 'C']})    

vectorizer = CountVectorizer(analyzer=lambda x: x.split(' - '))
X = vectorizer.fit_transform(df['Column'])

X.toarray()
array([[1, 1, 1],
       [1, 1, 0],
       [1, 0, 1],
       [1, 0, 0],
       [0, 1, 0],
       [0, 0, 1]])

vectorizer.get_feature_names()
['A', 'B', 'C']