将Pandas Dataframe列转换为一个热标签

Nir*_*r_J 5 python pandas sklearn-pandas one-hot-encoding

我有一个与此类似的pandas数据帧:

  Col1   ABC
0  XYZ    A
1  XYZ    B
2  XYZ    C
Run Code Online (Sandbox Code Playgroud)

通过get_dummies()在ABC列上使用pandas 函数,我可以得到:

  Col1   A   B   C
0  XYZ   1   0   0
1  XYZ   0   1   0
2  XYZ   0   0   1
Run Code Online (Sandbox Code Playgroud)

虽然我需要这样的东西,ABC列有一个list / array数据类型:

  Col1    ABC
0  XYZ    [1,0,0]
1  XYZ    [0,1,0]
2  XYZ    [0,0,1]
Run Code Online (Sandbox Code Playgroud)

我尝试使用该get_dummies函数,然后将所有列组合到我想要的列中.我发现很多答案解释了如何将多个列组合成字符串,如下所示:在pandas/python中的数据框中组合两列文本.但我无法想出一种方法将它们组合成一个列表.

这个问题介绍了使用sklearn的想法OneHotEncoder,但我无法让它工作.如何对一个pandas数据帧的一列进行单热编码?

还有一件事:我遇到的所有答案都有解决方案,其中列名称必须在组合时手动输入.有没有办法使用Dataframe.iloc()或拼接机制将列组合成一个列表?

Max*_*axU 6

以下是使用sklearn.preprocessing.LabelBinarizer的示例:

In [361]: from sklearn.preprocessing import LabelBinarizer

In [362]: lb = LabelBinarizer()

In [363]: df['new'] = lb.fit_transform(df['ABC']).tolist()

In [364]: df
Out[364]:
  Col1 ABC        new
0  XYZ   A  [1, 0, 0]
1  XYZ   B  [0, 1, 0]
2  XYZ   C  [0, 0, 1]
Run Code Online (Sandbox Code Playgroud)

熊猫替代品:

In [370]: df['new'] = df['ABC'].str.get_dummies().values.tolist()

In [371]: df
Out[371]:
  Col1 ABC        new
0  XYZ   A  [1, 0, 0]
1  XYZ   B  [0, 1, 0]
2  XYZ   C  [0, 0, 1]
Run Code Online (Sandbox Code Playgroud)


and*_*ece 5

你可以只使用tolist()

df['ABC'] = pd.get_dummies(df.ABC).values.tolist()

  Col1        ABC
0  XYZ  [1, 0, 0]
1  XYZ  [0, 1, 0]
2  XYZ  [0, 0, 1]
Run Code Online (Sandbox Code Playgroud)