小编典典

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

python

我有一个类似的熊猫数据框:

  Col1   ABC
0  XYZ    A
1  XYZ    B
2  XYZ    C

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

  Col1   A   B   C
0  XYZ   1   0   0
1  XYZ   0   1   0
2  XYZ   0   0   1

虽然我需要类似的内容,但ABC列的list / array数据类型为:

  Col1    ABC
0  XYZ    [1,0,0]
1  XYZ    [0,1,0]
2  XYZ    [0,0,1]

我尝试使用该get_dummies函数,然后将所有列组合到所需的列中。我找到了很多答案,解释了如何将多个列组合为字符串,如下所示:在pandas /
python中的dataframe中合并两列文本。但是我想不出一种将它们组合为列表的方法。

这个问题介绍了使用sklearn’s的想法OneHotEncoder,但我无法使其正常工作。如何对熊猫数据框的一列进行一次热编码?

还有一件事:我遇到的所有答案都有解决方案,在合并时必须手动键入列名称。有没有一种使用Dataframe.iloc()或拼接机制将列合并为列表的方法?


阅读 279

收藏
2021-01-20

共1个答案

小编典典

这是使用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]

熊猫替代品:

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]
2021-01-20