将函数应用于 pandas 系列的每个元素

CAB*_*CAB -2 python nltk python-3.x pandas

我正在尝试标记我的pandas系列中的每个句子。我尝试按照文档中的说明使用 apply 进行操作,但没有成功:

x.apply(nltk.word_tokenize)
Run Code Online (Sandbox Code Playgroud)

如果我只是使用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...
Run Code Online (Sandbox Code Playgroud)

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...
Run Code Online (Sandbox Code Playgroud)

错误nltk.word_tokenize(x)是:

TypeError: expected string or bytes-like object
Run Code Online (Sandbox Code Playgroud)

E. *_*eme 5

问题:您是否保存中间结果?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']            
Run Code Online (Sandbox Code Playgroud)

然后让我们创建一个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
Run Code Online (Sandbox Code Playgroud)

在交互式 Python 提示符下word_tokenize使用该函数执行表明它标记化了...apply()

但并不表明这是一个副本...而不是永久更改s

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

事实上,我们可以打印s来表明它没有改变......

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

相反,如果我们提供一个标签(在本例中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
Run Code Online (Sandbox Code Playgroud)

在交互式提示上执行此操作使我们能够更轻松地检测到这种情况,但在脚本中运行它有时意味着生成副本的事实将悄无声息地通过,并且没有任何指示。