1

在 tfidf 矢量化器之后我有以下输出。我想将密集输出解析为熊猫数据框列,但我无法直接将 toarray 或 todense 函数应用于稀疏 tfidf 输出并将其传递给熊猫数据框列。所以我将 tfidf 结果的密集输出接收到一个列表中。现在列表的形状为(6,20),我想将列表的每一行迭代解析为熊猫数据框列中的行,因为数据框列的长度也是 6。我尝试将列表转换为熊猫系列并将其传递给数据框但是不适用于二维列表。

from sklearn.feature_extraction.text import TfidfVectorizer

new_docs = ['Men Tops Tshirts missing ', 'Electronics Computers   Tablets Components Parts Razer',
           'Women Tops   Blouses Blouse Target ', 'Home Home Décor Home Décor Accents missing ', 
           'Women Jewelry Necklaces missing  ', 'Women Other Other missing  ']
vectorizer = TfidfVectorizer(TfidfVectorizer(ngram_range=(1,2),
               min_df=3, max_df=0.9, strip_accents='unicode', use_idf=1,
               smooth_idf=1, sublinear_tf=1 ))
new_term_freq_matrix = vectorizer.fit_transform(new_docs)
print (vectorizer.vocabulary_)
print (new_term_freq_matrix.todense())

example = pd.DataFrame({'test_data_column': new_docs})
lt_1 = []
lt_1 = (vectorizer.fit_transform(new_docs)).toarray()

print(lt_1)

lt_1 的输出

print(lt_1.shape)
(6, 20)
print(example)
                              test_data_column
0  Men Tops Tshirts missing                              
1  Electronics Computers   Tablets Components Parts Razer
2  Women Tops   Blouses Blouse Target                    
3  Home Home Décor Home Décor Accents missing            
4  Women Jewelry Necklaces missing                       
5  Women Other Other missing          
4

1 回答 1

1

您可以DataFrame一举构建,new_docs作为索引传递new_term_freq_matrix,并将 TFIDF 值作为数据传递。

df = pd.DataFrame(new_term_freq_matrix.todense(), index=new_docs)

如果您不想new_docs作为索引,则创建数据框并new_docs稍后插入 -

df = pd.DataFrame(new_term_freq_matrix.todense())
df.insert(0, 'docs', new_docs)

或者,

df = pd.DataFrame(new_term_freq_matrix.todense(), index=new_docs).reset_index()

前者性能更高,因为reset_index返回整个数据的副本。

另外,如果您正在处理稀疏数据,您可能会对pd.SparseDataFrameAPI 感兴趣。

于 2018-01-24T18:41:40.010 回答