2017-07-26 69 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