在pandas中进行一种单热编码的有效方法[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

这个问题类似于this one,但有一个区别:这里有一个数据帧列中的值列表,而不是单个值。

假设我们有一个pandas数据框,其中一列名为words。它包含文档中可用的单词索引。例如,在以下数据框中,有两个文档,其中第一个包含单词['a','b'],第二个包含['a','c','d']

df = pd.DataFrame()
df['words'] = [['a','b'],['a','c','d']]

我想将words列转换为不同的二进制列,每个单词一列。以上数据框将转换为:

df['a'] = [True, True]
df['b'] = [True, False]
df['c'] = [False, True]
df['d'] = [False, True]

现在,我有以下代码,它迭代w列中可用的不同单词words

df[w] = [w in word_list for word_list in df['words']]

显然,它很慢。有没有一种有效的方法来做到这一点?

python pandas dataframe
1个回答
2
投票

一种方法是使用get_dummies

In [31]: pd.get_dummies(df.words.apply(pd.Series).stack()).sum(level=0).astype(bool)
Out[31]:
      a      b      c      d
0  True   True  False  False
1  True  False   True   True

另一种方法,假设您没有字符串中的|,或使用任何其他分隔符

In [50]: df.words.str.join('|').str.get_dummies('|').astype(bool)
Out[50]:
      a      b      c      d
0  True   True  False  False
1  True  False   True   True

对于单一价值。

In [68]: df['a'] = df.words.apply(lambda x: 'a' in x)  # or ['a' in x for x in df.words]
© www.soinside.com 2019 - 2024. All rights reserved.