【问题标题】:Pandas get_dummies to create one hot with separator = ' ' and with character level separation [duplicate]Pandas get_dummies 用分隔符 = ' ' 和字符级分隔创建一个热点 [重复]
【发布时间】:2018-03-22 04:03:08
【问题描述】:
df = pd.DataFrame(["c", "b", "a p", NaN, "ap"])
df[0].str.get_dummies(' ')

上面的代码打印出类似这样的内容。

       a   p    b    c ap 
0      0   0    0    1  0
1      0   0    1    0  0 
2      1   1    0    0  0
3      0   0    0    0  0
4      0   0    0    0  1  

所需的输出如下:

       a   p    b    c  
0      0   0    0    1 
1      0   0    1    0  
2      1   1    0    0 
3      0   0    0    0 
4      1   1    0    0  

我相信这有点棘手。任何帮助表示赞赏。

【问题讨论】:

  • 问题顶部链接的答案很有帮助。即: # 创建一个虚拟变量数据帧 col0_dummy_df = df['0'].str.get_dummies(sep=',') # 将虚拟变量数据帧连接到主数据帧上。 pd.concat([df, col0_dummy_df], axis=1)

标签: python pandas one-hot-encoding


【解决方案1】:

你可以使用 str.get_dummies

df[0].str.get_dummies(' ')


    air bus car plane
0   0   0   1   0
1   0   1   0   0
2   1   0   0   1

【讨论】:

  • 非常感谢您之前的回答。 @Vaishali 如果你能回答这个最新的编辑,那真的很有帮助
【解决方案2】:

IIUCstr.get_dummies

df[0].str.get_dummies(sep=' ')
Out[745]: 
   air  bus  car  plane
0    0    0    1      0
1    0    1    0      0
2    1    0    0      1

或者

pd.get_dummies(pd.DataFrame(df[0].str.split().tolist()).stack()).sum(level=0)
Out[754]: 
   air  bus  car  plane
0    0    0    1      0
1    0    1    0      0
2    1    0    0      1

【讨论】:

  • 这次我领先了 12 秒,实际上只有 3 秒 :)
  • @Vaishali haha​​,在我身边显示我是 4 秒 :-)
  • 非常感谢您之前的回答。 @Wen 如果你能回答这个最新的编辑,那真的很有帮助
猜你喜欢
  • 2015-03-07
  • 1970-01-01
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-24
  • 2020-01-07
  • 1970-01-01
相关资源
最近更新 更多