调用函数use.apply in python

2024-05-14 15:29:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个缺点如下。尝试使用.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.

有人能帮我吗?


Tags: inselfinputcountfunctionbewordawesome
3条回答

我认为有几件事能帮你解决这个问题。第一个是将“awesome_count”函数转换为lambda函数。假设这里awesome_count的目标是返回单词“awesome”出现的次数,我知道产品[“word_count”]包含单词和计数字典(即“and”=>;5,“awesome”=>;2,“worst=”1)。这里的辛苦工作已经为您完成了,因为您拥有产品中的所有计数[“word_count”]。唯一要注意的是你要找的单词可能不在列表中。

def awesome_count():
   if 'awesome' in products['word_count']:
       return products['word_count']['awesome']
   else
       return 0L

这里的函数检查单词列表中是否有“awesome”。如果是,那么我们只返回产品[“word_count”][“awesome”](即awesome发生的次数)。如果“awesome”不存在,则默认为0。

所以让我们把这个变成一个lambda。根据他的说法:

products['awesome'] = products['word_count'].apply(awesome_count())

对lambda函数的每个调用都会传入products['word_count']。在lambda函数中,这是x

lambda x: x['awesome'] if 'awesome' in x else 0L

这与上面相同,但采用lambda格式。因此,将其合并为:

products['awesome'] = products['word_count'].apply(lambda x: x['awesome'] if 'awesome' in x else 0L) 

这行得通,但我们可以做得更好。与其硬编码“awesome”一词,不如使用更通用的代码:

word='awesome'
products[word] = products['word_count'].apply(lambda x: x[word] if word in x else 0L)

现在我们有了更通用的东西,可以插入任何单词。所以,假设我们有一个单词列表,我们需要计数。我们可以为清单上的每件事都这样做。

word_list = ['awesome','and','some','other','words']
for word in word_list:
    products[word] = products['word_count'].apply(lambda x: x[word] if word in x else 0L)    

这是一个很好的通用解决方案,可以用于任何数量的单词。快乐的编码。

必须将user-defined or built-in function or method, or a class object传递给apply方法,如果传递awesome_count(),则将返回值(10)传递给apply方法,则必须删除括号:

def awesome_count():
    return 10
products['awesome'] = products['word_count'].apply(awesome_count)

必须将每一行发送到函数进行处理。因此,函数需要接收一个参数,然后进行处理。这就是为什么你会收到这样一个错误。注意,在这种情况下,函数解析整个SFrame时不需要prentices 解决方法如下:

def awesome_count(x):
   if 'awesome' in x:
       return x['awesome']
   else
       return 0 

products['awesome'] = products['word_count'].apply(awesome_count)

相关问题 更多 >

    热门问题