Добавление 2-мерного списка (плотный вывод результата tfidf) в строки кадра данных pandas, каждый индекс

У меня есть вывод ниже после векторизатора tfidf. Я хочу разобрать плотный вывод в столбец фрейма данных pandas, но я не мог напрямую применить функцию toarray или todense для разреженного вывода tfidf и передать его в столбец фрейма данных pandas. Итак, я получил плотный вывод результатов tfidf в список. Теперь список имеет форму (6,20), и я хочу итеративно проанализировать каждую строку списка в строках в столбце фрейма данных pandas, поскольку длина столбца фрейма данных также равна 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          

person Rajesh Mappu    schedule 24.01.2018    source источник
comment
Здравствуйте, если на ваш вопрос был дан ответ, рассмотрите возможность принять ответ.   -  person cs95    schedule 25.01.2018
comment
Привет да. Я просто принял это. Мои извинения. Я экспериментировал.   -  person Rajesh Mappu    schedule 25.01.2018
comment
Не беспокойтесь, еще раз спасибо и удачи с остальным кодом.   -  person cs95    schedule 25.01.2018


Ответы (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.

person cs95    schedule 24.01.2018
comment
Привет, мне просто интересно, какая разница, если у нас есть строка данных со всем массивом: [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.55204307 0.40967959 0. 0. 0. 0. 0. 0. 0.47186812 0.55204307 0. ] какая разница, если мы будем иметь каждое значение в отдельных столбцах в дальнейших вычислениях, скажем, логистической регрессии. Верны ли мои мысли на этот счет? будет ли разница? - person Rajesh Mappu; 25.01.2018
comment
@RajeshThevar Я думаю, что scikit легче научиться понимать DataFrame скаляров, а не столбец списков. Кроме того, предварительная обработка скаляров более эффективна, чем столбцы списков. Но, в конце концов, это зависит. - person cs95; 25.01.2018