Pandas Dataframe.apply()因提供太多参数而引发typeerror

时间:2017-07-26 14:44:30

标签: python pandas typeerror 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()来应用此函数。所以我使用args,因为我需要传递两个额外的参数。

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

不知怎的,我得到了错误:

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

我显然给出了两个参数:dataframe row和args。那么为什么我会收到错误?

1 个答案:

答案 0 :(得分:1)

您有两种选择。您可以修改函数签名,也可以在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), ) )