【问题标题】:How to make dummy variables with comma separated valued columns? [closed]如何使用逗号分隔的值列制作虚拟变量? [关闭]
【发布时间】:2018-02-27 15:58:30
【问题描述】:

我正在为机器学习进行数据预处理,但遇到了一个问题。
这就是我想做的事情。

表格图片:

表格的类型是 pandas 数据框。

我当前的桌子是左一张,我想把我的桌子改成右一张。

电影和演员的数量不固定。


编辑: 数据输入

 df=pd.DataFrame({'name':['A','B','C'],'actors':['a,b','b,d','c,m']})

预期输出:

       a  b  c  d  m

A      1  1  0  0  0
B      0  1  0  1  0
C      0  0  1  0  1

【问题讨论】:

  • 请将数据添加为文本,而不是图像。最好以可以直接复制和粘贴到 Python 的方式进行。到目前为止你尝试了什么?什么不起作用?

标签: python-3.x pandas scikit-learn


【解决方案1】:

试试这个? (顺便说一句,kaggle 电影数据集,最好使用LabelEncoder

PS:name这个栏目我没有加,你可以直接加out['name']=df.name


选项 1 pd.crosstab

df.actors=df.actors.str.split(',')
df1=df.set_index('name').actors.apply(pd.Series).stack()
pd.crosstab(df1.index.get_level_values(0),df1).rename_axis(None).rename_axis(None,1)


Out[246]: 
   a  b  c  d  m
A  1  1  0  0  0
B  0  1  0  1  0
C  0  0  1  0  1

选项 2 get_dummies

pd.get_dummies(df.actors.str.split(',').apply(pd.Series).stack()).sum(level=0)

Out[230]: 
   a  b  c  d  m
0  1  1  0  0  0
1  0  1  0  1  0
2  0  0  1  0  1

选项 3 MultiLabelBinarizer

from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
    pd.DataFrame(mlb.fit_transform(df.actors.str.split(',')),columns=mlb.classes_,index=df.name).reset_index()
Out[238]: 
  name  a  b  c  d  m
0    A  1  1  0  0  0
1    B  0  1  0  1  0
2    C  0  0  1  0  1

数据输入

df=pd.DataFrame({'name':['A','B','C'],'actors':['a,b','b,d','c,m']})

【讨论】:

  • 我不知道有像df.actors.str.split(',')这样的函数。这真的很有帮助。也非常感谢你给了我很多选择!
  • @kdino Yw,美好的一天
猜你喜欢
  • 2017-07-10
  • 2013-12-24
  • 2023-03-22
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多