【问题标题】:scikit-learn: One hot encoding of column with list values [duplicate]scikit-learn:具有列表值的列的一种热编码[重复]
【发布时间】:2017-07-31 09:54:59
【问题描述】:

我正在尝试对如下数据帧进行编码:

A B C
2 '你好' ['我们',是','好']
1 '全部' ['你好', '世界']

现在您可以看到我可以标记第二列的字符串值,但我无法弄清楚如何对具有字符串值列表的第三列进行编码,并且列表的长度不同。即使我 onehotencode 这个我会得到一个数组,我不知道如何在编码后与其他列的数组元素合并。请推荐一些好的技术

【问题讨论】:

标签: python-2.7 machine-learning scipy one-hot-encoding


【解决方案1】:

假设我们有以下DF:

In [31]: df
Out[31]:
   A      B                C
0  2  Hello  [we, are, good]
1  1    All   [hello, world]

让我们使用sklearn.feature_extraction.text.CountVectorizer

In [32]: from sklearn.feature_extraction.text import CountVectorizer

In [33]: vect = CountVectorizer()

In [34]: X = vect.fit_transform(df.C.str.join(' '))

In [35]: df = df.join(pd.DataFrame(X.toarray(), columns=vect.get_feature_names()))

In [36]: df
Out[36]:
   A      B                C  are  good  hello  we  world
0  2  Hello  [we, are, good]    1     1      0   1      0
1  1    All   [hello, world]    0     0      1   0      1

您也可以将sklearn.preprocessing.MultiLabelBinarizer 用作@VivekKumar suggested in this comment

In [56]: from sklearn.preprocessing import MultiLabelBinarizer

In [57]: mlb = MultiLabelBinarizer()

In [58]: X = mlb.fit_transform(df.C)

In [59]: df = df.join(pd.DataFrame(X, columns=mlb.classes_))

In [60]: df
Out[60]:
   A      B                C  are  good  hello  we  world
0  2  Hello  [we, are, good]    1     1      0   1      0
1  1    All   [hello, world]    0     0      1   0      1

【讨论】:

    猜你喜欢
    • 2016-03-14
    • 2018-11-04
    • 2022-06-21
    • 1970-01-01
    • 2022-11-28
    • 2021-04-18
    • 1970-01-01
    相关资源
    最近更新 更多