Tom*_*ron 3 lambda apply pandas
apply()通过lambda与非pandas调用函数时的规则/过程是什么?下面的例子。显然没有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()
Run Code Online (Sandbox Code Playgroud)
示例1的输出
probPredDF columns: Index([0, 1, 'yPred', 'yTest'], dtype='object')
Out[215]:
0 equal
1 equal
2 equal
3 equal
4 equal
dtype: object
Run Code Online (Sandbox Code Playgroud)
没有lambda的示例2,在系列错误时引发布尔运算
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()
Run Code Online (Sandbox Code Playgroud)
示例2输出
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Run Code Online (Sandbox Code Playgroud)
一个机器人没什么魔术的lambda。它们是一个参数中的函数,可以内联定义,并且没有名称。您可以在需要使用lambda的函数中使用该函数,但是该函数还需要采用一个参数。您需要做类似...
将其定义为:
def wrapper(x):
return test(x['yTest'], x['yPred'])
Run Code Online (Sandbox Code Playgroud)
用作:
probPredDF.apply(wrapper, axis=1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2415 次 |
| 最近记录: |