Python 将函数应用于系列的每个元素
我正在尝试标记我的Python 将函数应用于系列的每个元素,python,python-3.x,pandas,nltk,Python,Python 3.x,Pandas,Nltk,我正在尝试标记我的pandas系列的每个句子。 我尝试按照文档中的说明使用apply,但没有成功: x.apply(nltk.word_tokenize) 如果我只是使用nltk.word\u tokenize(x)也不起作用,因为x不是字符串。有人知道吗 编辑:x是一个pandas系列,包含以下句子: 0 A very, very, very slow-moving, aimless movie ... 1 Not sure who was more lost - t
pandas
系列的每个句子。
我尝试按照文档中的说明使用apply,但没有成功:
x.apply(nltk.word_tokenize)
如果我只是使用nltk.word\u 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\u 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\u标记化(x)
时,错误为:
TypeError: expected string or bytes-like object
apply调用应该可以正常工作。我试过你的代码,它对我来说很好。你能分享你正在使用的确切代码吗
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
问题:是否保存中间结果
x.apply()
创建原始系列
的副本,并对系列
的每个元素应用适当的转换。请参阅下面的示例,了解这可能会如何影响您的代码
我们将首先确认word\u 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']
然后让我们创建一个系列
来玩
>>> 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
在交互式Python提示符上使用apply()
函数执行word\u标记化
,表明它标记化了
但并不表示这是一份副本。。。不是对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
相反,如果我们为apply()
函数调用的结果提供标签(在本例中为wt
),则允许我们永久保存结果。我们可以通过打印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
在交互式提示下执行此操作可以让我们更容易地检测到这种情况,但在脚本中运行它有时意味着生成副本的事实将以静默方式传递,而没有任何指示。当您说它不工作时,您是否收到错误?如果是的话,你能把错误贴在这里吗?还有一个关于x
的非常小的例子,如果您运行print(x.apply(nltk.word\u tokenize)
,它将返回相同的结果?如果nltk.word\u tokenize(x)给您提供TypeError:expected string或bytes-like-object-可能是空值的情况。另请参见type(x)
的输出?