【问题标题】:Pandas Dataframe.apply() raises typeerror for providing too many argumentsPandas Dataframe.apply() 因提供太多参数而引发类型错误
【发布时间】:2018-01-01 23:23:19
【问题描述】:

我有这个功能:

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')

我显然给出了两个参数:数据框行和参数。那么为什么我会收到错误消息?

【问题讨论】:

    标签: python pandas typeerror apply


    【解决方案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), ) )
    

    【讨论】:

    • 仅仅添加括号还不行。当我这样做时还需要做其他事情吗?
    • @Duudsrednaz 试试args=((VARIABLE1, VARIABLE2), )?
    • @Duudsrednaz 我只是假设大括号不被识别为没有逗号的元组,以表明您正在传递参数列表,其中一个是元组。我有点难以解释:)
    猜你喜欢
    • 2021-06-06
    • 2021-05-26
    • 2021-09-04
    • 2019-11-16
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    相关资源
    最近更新 更多