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

将以逗号分隔的字符串的pandas DataFrame列转换为一键编码

阎坚成
2023-03-14
问题内容

我有一个由一栏组成的大型数据框(“数据”)。列中的每一行由一个字符串组成,每个字符串由逗号分隔的类别组成。我希望对这些数据进行热编码。

例如,

data = {"mesh": ["A, B, C", "C,B", ""]}

由此,我想得到一个包含以下内容的数据框:

index      A       B.     C
0          1       1      1
1          0       1      1
2          0       0      0

我怎样才能做到这一点?


问题答案:

请注意,您不是在处理OHE。

str.split+ stack+ get_dummies+sum

df = pd.DataFrame(data)
df

      mesh
0  A, B, C
1      C,B
2

(df.mesh.str.split('\s*,\s*', expand=True)
   .stack()
   .str.get_dummies()
   .sum(level=0))
df

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

apply + value_counts

(df.mesh.str.split(r'\s*,\s*', expand=True)
   .apply(pd.Series.value_counts, 1)
   .iloc[:, 1:]
   .fillna(0, downcast='infer'))

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

pd.crosstab

x = df.mesh.str.split('\s*,\s*', expand=True).stack()
pd.crosstab(x.index.get_level_values(0), x.values).iloc[:, 1:]
df

col_0  A  B  C
row_0         
0      1  1  1
1      0  1  1
2      0  0  0


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

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

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

  • 问题内容: 在我的数据框中,我有一个类别变量,我想将其转换为虚拟变量。但是,此列具有多个值,以逗号分隔: 最终,我希望每个可能的离散值都具有二进制列;换句话说,最终的列数等于原始列中唯一值的数量。我想我必须使用split()来获取每个单独的值,但不确定随后要做什么。任何提示非常感谢! 编辑:额外的扭曲。列具有空值。为了回应评论,以下是所需的输出。谢谢! 问题答案: 使用str.get_dummie

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

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