将逗号分隔字符串的 pandas 列转换为虚拟变量

Converting pandas column of comma-separated strings into dummy variables

在我的数据框中,我有一个分类变量,我想将其转换为虚拟变量。但是,此列有多个值,用逗号分隔:

0    'a'
1    'a,b,c'
2    'a,b,d'
3    'd'
4    'c,d'

最终,我希望每个可能的离散值都有二进制列;换句话说,最终列数等于原始列中唯一值的数量。我想我必须使用 split() 来获取每个单独的值,但不确定之后该怎么做。非常感谢任何提示!

编辑:额外的扭曲。列具有空值。并响应评论,以下是所需的输出。谢谢!

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

使用str.get_dummies

df['col'].str.get_dummies(sep=',')

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

编辑:更新答案以解决一些问题。

问题 1:为什么系列方法 get_dummies 不接受参数 prefix=... 而 pandas.get_dummies() 接受它

Series.str.get_dummies is a series level method (as the name suggests!). We are one hot encoding values in one Series (or a DataFrame column) and hence there is no need to use prefix. Pandas.get_dummies 另一方面,可以对多列进行热编码。在这种情况下,前缀参数用作原始列的标识符。

如果要将前缀应用于 str.get_dummies,您可以随时使用 DataFrame.add_prefix

df['col'].str.get_dummies(sep=',').add_prefix('col_')

问题 2:如果您有多个列开始,如何将虚拟对象合并回原始框架? 您可以使用 DataFrame.concat 将一个热编码列与数据框中的其余列合并。

df = pd.DataFrame({'other':['x','y','x','x','q'],'col':['a','a,b,c','a,b,d','d','c,d']})
df = pd.concat([df, df['col'].str.get_dummies(sep=',')], axis = 1).drop('col', 1)

  other a   b   c   d
0   x   1   0   0   0
1   y   1   1   1   0
2   x   1   1   0   1
3   x   0   0   0   1
4   q   0   0   1   1

str.get_dummies函数不接受prefix参数,但可以重命名返回的虚拟DataFrame的列名:

data['col'].str.get_dummies(sep=',').rename(lambda x: 'col_' + x, axis='columns')