我最近在練習一些 Python,遇到了一個障礙,我無法讓我的 agg() 作業,后來我發現這是因為我不必呼叫這些函式。
我的問題是:我希望有人能解釋一下我們在函式末尾寫 () 時到底在做什么,做和不做有什么區別
編輯:此代碼是示例代碼,我不尋找此代碼的答案。我正在尋找關于呼叫或不呼叫函式的概念以及它是如何作業的答案。
我使用的回傳錯誤:'沒有指定'(無引數)
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])
uj5u.com熱心網友回復:
在
sales.groupby('type')['weekly_sales'].agg([np.min,...]
sales是一個 Pandas 資料框,groupby('type')是一個回傳物件的方法呼叫,該GroupBy物件又具有一個agg方法。
查找它的檔案:
https://pandas.pydata.org/pandas-docs/version/0.23/generated/pandas.core.groupby.DataFrameGroupBy.agg.html
據此,第一個論點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]: 3
agg想要功能,而不是數量。 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.997238
agg識別一組特定的字串,并將其轉換為函式呼叫。等效地,我們可以傳遞一個函式:
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'
您將錯誤總結為“回傳錯誤:'沒有指定'(無引數)”。在 SO 上這樣做不是一個好主意。您應該完整閱讀錯誤,并完整顯示它。回溯告訴我們問題出在np.min()步驟上。它沒有到呼叫agg.
閱讀回溯
閱讀檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488925.html
