Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将函数应用于系列的每个元素_Python_Python 3.x_Pandas_Nltk - Fatal编程技术网

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)
的输出?