2016-08-02 2 views
0

Я пытаюсь выполнить некоторую обработку текста с использованием NLTK и Pandas.Хранение списка в столбце DataFrame pandas

У меня есть DataFrame с текстом столбца. Я хочу добавить столбец «text_tokenized», который будет сохранен как вложенный список.

Мой код для tokenizing текста:

def sent_word_tokenize(text): 
    text = unicode(text, errors='replace') 
    sents = sent_tokenize(text) 
    tokens = map(word_tokenize, sents) 

    return tokens 

В настоящее время я пытаюсь применить эту функцию следующим образом:

df['text_tokenized'] = df.apply(lambda row: sent_word_tokenize(row.text), axis=1) 

Что дает мне ошибку:

ValueError: Shape of passed values is (100, 3), indices imply (100, 21) 

Не конечно, как это исправить и что здесь не так.

+0

Трудно сказать наверняка, но выглядит как ось = 1 - операция _row_, когда у вас есть _column_ текста? – benten

+0

http://stackoverflow.com/a/19667189/1168680 – RAVI

+0

return (tokens) – RAVI

ответ

1

решаемые свой вопрос, используя другую ось:

Вместо:

df['text_tokenized'] = df.apply(lambda row: sent_word_tokenize(row.text), axis=1) 

Я использовал:

df['text_tokenized'] = df.text.apply(lambda text: sent_word_tokenize(text)) 

Хотя я не знаю, почему это работает, и я очень признателен, если кто-нибудь может объяснить это мне.

+1

Когда вы указали' axis = 1', функция apply действовала по столбцу (через ** все столбцы ** кадра данных) , Но вместо этого вы должны были выполнить вычисление по ряду (через ** каждую строку ** в кадре данных). Следовательно, необходимо указать 'axis = 0'. –