对pandas DataFrame中的列中的字符串进行一种热编码

时间:2020-01-28 02:53:37

标签: python pandas

我有一个带有“描述”列的DataFrame,我想进行一个热编码,其中包括描述中单词的单词计数

    description
0   test words that describe things
1   more and more words here
2   things test

所需的输出

    test   words  that describe things more  here  and
0   1.0    1.0    1.0    1.0    1.0    0.0   0.0   0.0
1   0.0    1.0    0.0    0.0    0.0    2.0   1.0   1.0
2   1.0    0.0    0.0    0.0    1.0    0.0   0.0   0.0

我目前拥有的解决方案是:

one_hot = df.apply(lambda x: pd.Series(x.description).str.split(expand=True).stack().value_counts(), axis=1)

在大型数据集(13万行)上,这变得非常慢(每行2.6毫秒),我想知道是否有更好的解决方案。 我还想删除仅出现在一个条目中的单词。

    test   words  things
0   1.0    1.0    1.0
1   0.0    1.0    0.0
2   1.0    0.0    1.0

1 个答案:

答案 0 :(得分:1)

IIUC,为了计数,您可以在groupby+sum之后在axis=1上进行get_dummies

final = (pd.get_dummies(df['description'].str.split(expand=True))
         .groupby(lambda x: x.split('_')[-1],axis=1).sum())

或与apply(slower):

df['description'].str.split(expand=True).apply(pd.value_counts,axis=1).fillna(0)

   and  describe  here  more  test  that  things  words
0    0         1     0     0     1     1       1      1
1    1         0     1     2     0     0       0      1
2    0         0     0     0     1     0       1      0