将2维列表(tfidf结果的密集输出)附加到pandas数据帧行,每个索引

时间:2018-01-24 18:32:17

标签: python pandas dataframe tf-idf tfidfvectorizer

在tfidf矢量化后我有以下输出。我想将密集输出解析为pandas数据帧列,但我无法直接应用toarray或todense函数来稀疏tfidf输出并将其传递给pandas dataframe列。所以我收到了tfidf结果的密集输出到列表中。现在列表是形状的(6,20)并且我想迭代地将每行列表解析成pandas dataframe列中的行,因为dataframe列的长度也是6.我尝试将列表转换为pandas系列并将其传递给dataframe但是没有在二维列表上工作。

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)

output of 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          

1 个答案:

答案 0 :(得分: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.SparseDataFrame API感兴趣。