Примените TfidfVectorizer в каждой строке фрейма данных, представляющего собой список списков. - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть кадр данных pandas, содержащий 2 столбца, и я хочу использовать sklearn TfidfVectorizer для текстовой классификации в одном из них. Однако этот столбец является списком списков, и TFIDF хочет получить необработанный ввод в виде текста. В этом вопросе они предоставляют решение в случае, если у нас есть только один список списков, но я хотел бы спросить, как можно было бы применить эту функцию в каждой отдельной строке моего фрейма данных, которая содержит список списков. Заранее спасибо.

Input:

0    [[this, is, the], [first, row], [of, dataframe]]
1    [[that, is, the], [second], [row, of, dataframe]]
2    [[etc], [etc, etc]]

Требуется вывод:

0    ['this is the', 'first row', 'of dataframe']
1    ['that is the', 'second', 'row of dataframe']
2    ['etc', 'etc etc']

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете использовать применить :

import pandas as pd

df = pd.DataFrame(data=[[[['this', 'is', 'the'], ['first', 'row'], ['of', 'dataframe']]],
                        [[['that', 'is', 'the'], ['second'], ['row', 'of', 'dataframe']]]],
                  columns=['paragraphs'])


df['result'] = df['paragraphs'].apply(lambda xs: [' '.join(x) for x in xs])
print(df['result'])

выход

0     [this is the, first row, of dataframe]
1    [that is the, second, row of dataframe]
Name: result, dtype: object

Далее, если вы хотите применить векторизатор вместе с вышеуказанной функцией, вы можете сделать что-то вроде этого:

def vectorize(xs, vectorizer=TfidfVectorizer(min_df=1, stop_words="english")):
    text = [' '.join(x) for x in xs]
    return vectorizer.fit_transform(text)


df['vectors'] = df['paragraphs'].apply(vectorize)
print(df['vectors'].values)
...