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

发布于 2021-01-29 14:58:08

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

  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()或拼接机制将列合并为列表的方法?

关注者
0
被浏览
108
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看