我有一个缺点如下。尝试使用.apply
调用函数。但它总是给我一个错误,说函数是不可调用的。
def awesome_count():
return 10
products['awesome'] = products['word_count'].apply(awesome_count())
AssertionError Traceback (most recent call last)
<ipython-input-45-493b4bfe94cc> in <module>()
----> 1 products['awesome'] = products['word_count'].apply(awesome_count())
C:\Users\twu\AppData\Local\Dato\Dato Launcher\lib\site-packages\graphlab\data_structures\sarray.pyc in apply(self, fn, dtype, skip_undefined, seed)
1598 [0.0, 1.0, 2.0]
1599 """
-> 1600 assert callable(fn), "Input function must be callable."
1601
1602 dryrun = [fn(i) for i in self.head(100) if i is not None]
AssertionError: Input function must be callable.
有人能帮我吗?
我认为有几件事能帮你解决这个问题。第一个是将“awesome_count”函数转换为lambda函数。假设这里awesome_count的目标是返回单词“awesome”出现的次数,我知道产品[“word_count”]包含单词和计数字典(即“and”=>;5,“awesome”=>;2,“worst=”1)。这里的辛苦工作已经为您完成了,因为您拥有产品中的所有计数[“word_count”]。唯一要注意的是你要找的单词可能不在列表中。
这里的函数检查单词列表中是否有“awesome”。如果是,那么我们只返回产品[“word_count”][“awesome”](即awesome发生的次数)。如果“awesome”不存在,则默认为0。
所以让我们把这个变成一个lambda。根据他的说法:
对lambda函数的每个调用都会传入products['word_count']。在lambda函数中,这是x
这与上面相同,但采用lambda格式。因此,将其合并为:
这行得通,但我们可以做得更好。与其硬编码“awesome”一词,不如使用更通用的代码:
现在我们有了更通用的东西,可以插入任何单词。所以,假设我们有一个单词列表,我们需要计数。我们可以为清单上的每件事都这样做。
这是一个很好的通用解决方案,可以用于任何数量的单词。快乐的编码。
必须将user-defined or built-in function or method, or a class object传递给
apply
方法,如果传递awesome_count()
,则将返回值(10
)传递给apply
方法,则必须删除括号:必须将每一行发送到函数进行处理。因此,函数需要接收一个参数,然后进行处理。这就是为什么你会收到这样一个错误。注意,在这种情况下,函数解析整个SFrame时不需要prentices 解决方法如下:
相关问题 更多 >
编程相关推荐