2017-03-21 177 views
1

我有熊猫文本列:熊猫+ CountVectorizer:如何筛选行快速

df['TEXT_COL'] 

然后我申请CountVectorizer它:

vectorizer = CountVectorizer() 
v = vectorizer.fit_transform(df['TEXT_COL']) 

,并得到一组字/特点:

ft = v.get_feature_names() 

和TDM:

m = vectorizer.transform(df['TEXT_COL']) 

我需要:DF只包含包含来自feature_set英尺特定功能行。

如何得到它?

熊猫设置:

import pandas as pd 

data = [('Word'), ('Word Sea Ocean'), ('Tree'), ('Forest Tree')] 

df = pd.DataFrame(data) 
df.columns = ['TEXT_COL'] 

from sklearn.feature_extraction.text import CountVectorizer 

vectorizer = CountVectorizer() 
v = vectorizer.fit_transform(df['TEXT_COL']) 

ft = vectorizer.get_feature_names() 
m = vectorizer.transform(df['TEXT_COL']) 

enter image description here

用于英尺F:

???

+0

可以显示/发表您的期望的数据集?如果你要搜索所有的功能,那么你将得到几乎所有的行(除了那些只包含停用词的行) – MaxU

回答

1

这里是一个小的演示:

# execute your setup script ... 

In [48]: vectorizer.vocabulary_ 
Out[48]: {'forest': 0, 'ocean': 1, 'sea': 2, 'tree': 3, 'word': 4} 

m是一个稀疏矩阵

In [49]: m 
Out[49]: 
<4x5 sparse matrix of type '<class 'numpy.int64'>' 
     with 7 stored elements in Compressed Sparse Row format> 

我们可以把它转换成普通numpy的数组:

In [50]: m.toarray() 
Out[50]: 
array([[0, 0, 0, 0, 1], 
     [0, 1, 1, 0, 1], 
     [0, 0, 0, 1, 0], 
     [1, 0, 0, 1, 0]], dtype=int64) 

如何列出一个特别的功能:

In [51]: m[:, vectorizer.vocabulary_['sea']].toarray() 
Out[51]: 
array([[0], 
     [1], 
     [0], 
     [0]], dtype=int64) 

或使用ft

In [57]: m[:, ft.index('sea')].toarray() 
Out[57]: 
array([[0], 
     [1], 
     [0], 
     [0]], dtype=int64) 

In [52]: df 
Out[52]: 
     TEXT_COL 
0   Word 
1 Word Sea Ocean 
2   Tree 
3  Forest Tree 

让我们显示包含功能'tree'所有行:

In [71]: idx = m[:, ft.index('tree')] == 1 

In [72]: df[idx.toarray()] 
Out[72]: 
     TEXT_COL 
2   Tree 
3 Forest Tree 

或只是这样的:

In [77]: df[m[:, ft.index('tree')].astype(bool).toarray()] 
Out[77]: 
     TEXT_COL 
2   Tree 
3 Forest Tree 
+0

工程就像一个魅力!非常感谢。 –

+0

@DenisKulagin,很高兴我能帮忙:) – MaxU