我正在尝试对如下数据帧进行编码:
ABC
2 'Hello' ['we', are', 'good']
1 'All' ['hello', 'world']
现在如您所见,我可以标记第二列的字符串值,但我无法弄清楚如何对具有字符串值列表且列表长度不同的第三列进行编码。即使我 onehotencode 这个我会得到一个数组,我不知道如何在编码后与其他列的数组元素合并。请推荐一些好的技术
我正在尝试对如下数据帧进行编码:
ABC
2 'Hello' ['we', are', 'good']
1 'All' ['hello', 'world']
现在如您所见,我可以标记第二列的字符串值,但我无法弄清楚如何对具有字符串值列表且列表长度不同的第三列进行编码。即使我 onehotencode 这个我会得到一个数组,我不知道如何在编码后与其他列的数组元素合并。请推荐一些好的技术
假设我们有以下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
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