2017-07-26 90 views
0

我有這樣的功能:熊貓Dataframe.apply()拋出類型錯誤提供的參數太多

def function(row,args): 
array = np.array(row['Revenue'+args[0]:'Revenue'+str(args[1])]).astype(float) 
if np.mean(array) < (5000/12): 
    return 'XXS' 
if np.mean(array) < (10000/12): 
    return 'XS' 
if np.mean(array) < (25000/12): 
    return 'S' 
if np.mean(array) < (50000/12): 
    return 'M' 
if np.mean(array) < (250000/12): 
    return 'L' 
if np.mean(array) < (750000/12): 
    return 'XL' 
if np.mean(array) >= (750000/12): 
    return 'XXL' 

我想申請使用Pandas.Dataframe.apply()這個函數。所以我使用參數,因爲我需要傳遞兩個額外的參數。

df.apply(function,axis=1,args=(VARIABLE1,VARIABLE2)) 

不知怎的,我得到的錯誤:

TypeError: ('klantschaling() takes 2 positional arguments but 3 were given') 

我明明給兩個參數:數據幀的行和args。那麼,爲什麼我會得到這個錯誤呢?

回答

0

你有兩種選擇。您可以修改您的函數簽名,也可以在df.apply中傳遞一個元組。

的第一選擇是重新定義你的函數是這樣的:

def function(row, arg1, arg2): 
    ... 

然後調用df.apply的你。第二,簡單的替代方案是包裝你的論點在迭代:

df.apply(function, axis=1, args=([VARIABLE1, VARIABLE2],)) 

或者,

df.apply(function, axis=1, args=((VARIABLE1, VARIABLE2),)) 
+0

簡單地將支架還沒有工作。當我這樣做時還需要做其他事情嗎? – Duudsrednaz

+0

@Duudsrednaz嘗試'args =((VARIABLE1,VARIABLE2),)'? –

+0

作品。任何原因爲什麼裸組不會工作? – Duudsrednaz