当前位置: 首页 > 面试题库 >

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

窦成荫
2023-03-14
问题内容

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

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

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

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

Series.str.get_dummies是一个序列级方法(顾名思义!)。我们是一个Series(或DataFrame列)中的一种热编码值,因此不需要使用前缀。另一方面,Pandas.get_dummies可以对多个列进行热编码。在这种情况下,prefix参数将用作原始列的标识符。

如果要将前缀应用于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


 类似资料:
  • 问题内容: 我有一个由一栏组成的大型数据框(“数据”)。列中的每一行由一个字符串组成,每个字符串由逗号分隔的类别组成。我希望对这些数据进行热编码。 例如, 由此,我想得到一个包含以下内容的数据框: 我怎样才能做到这一点? 问题答案: 请注意,您不是在处理OHE。 + + + +

  • 问题内容: 如何在Java中转换为逗号分隔的字符串? 结果我想要: 这是非常相似的参考问题,但是这些解决方案都无法提供结果,这正是我所需要的。 到目前为止我尝试过的 问题答案: 这是一个流版本,在功能上等同于khelwood,但使用了不同的方法。 他们都创建了一个,将每个映射到一个,并用逗号将它们连接在一起。 它们在性能上也应该完全相同,尽管从 技术上讲 我是直接打电话给他,而他是在打电话给代表。

  • 如何在Java中将int[]转换为逗号分隔的字符串? 我想要的结果是: 这里有非常相似的参考问题,但这些解决方案都没有提供我需要的结果。 > 如何在Java中使用toString方法将int数组转换为String 如何在不SomeType@2f92e0f4的情况下打印Java对象? 如何转换列表 到目前为止我所做的,

  • 本文向大家介绍在Java中将字符串列表转换为逗号分隔的字符串,包括了在Java中将字符串列表转换为逗号分隔的字符串的使用技巧和注意事项,需要的朋友参考一下 首先,让我们说以下是我们的String列表- 现在,使用String.join()将其转换为逗号分隔的字符串 示例 以下是在Java中将字符串列表转换为逗号分隔的字符串的程序- 输出结果

  • 问题内容: 我知道如果要将s 数组转换为a ,我可以这样做: 但我不知道如何将s 数组转换为逗号分隔 问题答案: 好吧,你可以这样做:

  • 我有以下字符串 我想转换成一个可变数组,这样它就变成了[4,5]我尝试了以下操作,但没有成功