带和不带 lambda 的 pandas apply()

2023-11-23

使用 pandas 调用函数时的规则/过程是什么apply()通过 lambda 与不通过 lambda?下面的例子。显然,如果没有 lambda,整个系列( df[column name] )就会传递给“test”函数,该函数会在尝试对系列进行布尔运算时引发错误。

如果通过 lambda 调用相同的函数,它就可以工作。对每一行进行迭代,每行作为“x”传递,并且 df[ 列名 ] 返回当前行中该列的单个值。

这就像 lambda 正在删除一个维度。有人对此有解释或指出具体的文档吗?谢谢。

使用 lambda 的示例 1 工作正常

print("probPredDF columns:", probPredDF.columns)

def test( x, y):
    if x==y:
        r = 'equal'
    else:
        r = 'not equal'
    return r    

probPredDF.apply( lambda x: test( x['yTest'], x[ 'yPred']), axis=1 ).head()

示例1输出

probPredDF columns: Index([0, 1, 'yPred', 'yTest'], dtype='object')

Out[215]:
0    equal
1    equal
2    equal
3    equal
4    equal
dtype: object

示例 2 没有 lambda,在系列错误上抛出布尔运算

print("probPredDF columns:", probPredDF.columns)

def test( x, y):
    if x==y:
        r = 'equal'
    else:
        r = 'not equal'
    return r    

probPredDF.apply( test( probPredDF['yTest'], probPredDF[ 'yPred']), axis=1 ).head()

示例2输出

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

没有什么神奇的lambda。它们是一个参数中的函数,可以内联定义,并且没有名称。您可以使用需要 lambda 的函数,但该函数还需要采用一个参数。你需要做一些事情,比如...

将其定义为:

def wrapper(x):
    return test(x['yTest'], x['yPred'])

将其用作:

probPredDF.apply(wrapper, axis=1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带和不带 lambda 的 pandas apply() 的相关文章

随机推荐