【发布时间】:2020-12-01 04:53:08
【问题描述】:
我有一个包含单词(无标点符号)的单列(“字符串”)的数据框。我需要计算某个单词(在下面的示例中,单词:“problem”)出现在此数据框中的行数。
首先,我为每个单词创建了一个列,计算了每个单词在每一行中出现的次数,并计算了“问题”为正值的行数。那是method1_outcome。
然后,我使用 sklearn 的内置 CountVectorizer 对象将相同的数据帧行转换为稀疏矩阵,并计算与“问题”(method2_outcome)对应的列的正值。
问题是这些值不匹配。而且差别也不小。 method2_outcome 高出 11% 以上。这里发生了什么?我查看了 CountVectorizer 的文档,但找不到答案。
第一种方法:
for word in some_words:
df[word] = df['strings'].apply(lambda s : s.split().count(word))
method1_outcome = np.count_nonzero(df['problem'].values)
第二种方法:
vect = CountVectorizer(vocabulary=some_words)
word_matrix = vect.fit_transform(df['strings'])
ind = vect.vocabulary_['problem']
method2_outcome = np.count_nonzero(word_matrix[:,ind].toarray())
【问题讨论】:
标签: python pandas scikit-learn countvectorizer