我最近正在练习一些Python,我遇到了一个路障,在那里我无法让agg()工作,后来我发现这是因为我不需要调用函数。
我的问题是:我希望有人能解释一下,当我们在函数的末尾写()时,我们到底在做什么,以及做它和不做它有什么区别
编辑:这个代码是示例代码,IM没有在这个代码上寻找答案。我在寻找一个关于调用或不调用A函数的概念的答案,以及它是如何工作的。
我所使用的返回错误的内容:“no指定的”(无参数)
sales_stats = sales.groupby('type')['weekly_sales'].agg([np.min(),np.max(),np.median(),np.mean()])正确代码:
对于每种存储类型,聚合weekly_sales:获取最小、最大、平均和中值
sales_stats = sales.groupby('type')['weekly_sales'].agg([np.min,np.max,np.median,np.mean])发布于 2022-06-12 15:19:46
在……里面
sales.groupby('type')['weekly_sales'].agg([np.min,...]sales是一个Pandas,groupby('type')是一个返回GroupBy对象的方法调用,而后者又有一个agg方法。
查找它的文档:
根据这一点,agg的第一个参数是
func : function, string, dictionary, or list of string/functions在Python中,函数是“第一类对象”,也就是说,它们可以像数字和列表一样作为参数传递,也可以放在列表中。
np.max是一个函数(在numpy模块中)。[np.max, np.min]是一个函数列表。
np.max是以下功能:
In [2]: np.max
Out[2]: <function numpy.amax(a, axis=None, out=None, keepdims=<no value>, initial=<no value>, where=<no value>)>np.max(...)是函数的调用,并产生其他东西,而不是函数本身。在这种情况下,它返回一个数字:
In [3]: np.max(np.array([1,2,3]))
Out[3]: 3agg需要的是函数,而不是数字。agg将负责使用组中的数组(或列表或序列)调用np.max。
请注意,仅仅将()添加到函数中可能没有什么用处。它甚至可能引起错误。
所以你要问的部分是基本的Python --函数和调用函数之间的区别。同时也是pandas和numpy的问题。因此,它需要读取相应的函数/方法文档。
注意,agg文档指定了function本身必须接受的内容。
从agg文档中获取示例框架:
它显示了为agg提供一个字符串:
In [9]: df.groupby('A').agg('min')
Out[9]:
B C
A
1 1 -1.589447
2 3 -0.997238agg识别一组特定的字符串,并将其转换为函数调用。等价地,我们可以传递一个函数:
In [10]: df.groupby('A').agg(np.min)
Out[10]:
B C
A
1 1 -1.589447
2 3 -0.997238但是,当我们像您一样使用np.min()时,我们会得到一个错误:
In [11]: df.groupby('A').agg(np.min())
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Input In [11], in <cell line: 1>()
----> 1 df.groupby('A').agg(np.min())
File <__array_function__ internals>:4, in amin(*args, **kwargs)
TypeError: _amin_dispatcher() missing 1 required positional argument: 'a'您将错误总结为“返回错误:‘无指定’(无参数)”。在这种情况下这样做不是个好主意。您应该完整地阅读错误,并完整地显示出来。回溯告诉我们,问题在于np.min()步骤。它并没有打电话给agg。
https://stackoverflow.com/questions/72592360
复制相似问题