Применить функцию к каждому элементу серии панд - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь токенизировать каждое предложение моей серии pandas.Я пытаюсь сделать, как я вижу в документации, используя apply, но не сработало:

x.apply(nltk.word_tokenize)

Если я просто использую nltk.word_tokenize(x), тоже не сработало, потому что x не является строкой,У кого-нибудь есть идеи?

Отредактировано: x - это pandas серия с предложениями:

0       A very, very, very slow-moving, aimless movie ...
1       Not sure who was more lost - the flat characte...
2       Attempting artiness with black & white and cle...

С x.apply(nltk.word_tokenize) возвращается точно так же:

0       A very, very, very slow-moving, aimless movie ...
1       Not sure who was more lost - the flat characte...
2       Attempting artiness with black & white and cle...

При nltk.word_tokenize(x) ошибка:

TypeError: expected string or bytes-like object

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Вопрос: Вы сохраняете свои промежуточные результаты?x.apply() создает копию вашего оригинала Series с соответствующими преобразованиями, примененными к каждому элементу Series.Ниже приведен пример того, как это может повлиять на ваш код ...

Начнем с подтверждения того, что word_tokenize() работает с образцом фрагмента текста.

>>> import pandas as pd
>>> from nltk import word_tokenize
>>> word_tokenize('hello how are you')   # confirming that word_tokenize works.
['hello', 'how', 'are', 'you']            

Затемдавайте создадим Series для игры.

>>> s = pd.Series(['hello how are you',
                   'lorem ipsum isumming lorems',
                   'more stuff in a line'])

>>> print(s)
0              hello how are you
1    lorem ipsum isumming lorems
2           more stuff in a line
dtype: object

Выполнение word_tokenize с использованием функции apply() в интерактивном приглашении Python показывает, что оно токенизирует ...

Но не 'Это означает, что это копия ... а не постоянное изменение s

>>> s.apply(word_tokenize)
0              [hello, how, are, you]
1    [lorem, ipsum, isumming, lorems]
2          [more, stuff, in, a, line]
dtype: object

Фактически мы можем вывести s, чтобы показать, что оно не изменилось ...

>>> print(s)
0              hello how are you
1    lorem ipsum isumming lorems
2           more stuff in a line
dtype: object

Если вместо этого мы добавим метку, в данном случае wt к результатам вызова функции apply(), это позволит нам сохранить результаты навсегда.Что мы можем увидеть, напечатав wt.

>>> wt = s.apply(word_tokenize)
>>> print(wt)
0              [hello, how, are, you]
1    [lorem, ipsum, isumming, lorems]
2          [more, stuff, in, a, line]
dtype: object

Выполнение этого в интерактивном приглашении позволяет нам легче обнаружить такое условие, но запуск его в сценарии иногда означает, что факт, что копия былапроизойдет, пройдет бесшумно и без указания.

0 голосов
/ 26 августа 2018

Применить вызов должен работать нормально. Я попробовал ваш код, и он отлично работает для меня. Можете ли вы поделиться точным кодом, который вы используете

    In [16]: s
    Out[16]:
    0     A very, very, very slow-moving, aimless movie
    1    Not sure who was more lost - the flat characte
    dtype: object

    In [17]: s.apply(nltk.word_tokenize)
    Out[17]:
    0    [A, very, ,, very, ,, very, slow-moving, ,, ai...
    1    [Not, sure, who, was, more, lost, -, the, flat...
    dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...