Pandas apply带与不带lambda调用impliedVolatility运行差异问题
原因说明
pandas的DataFrame.apply()要求传入可调用对象(即函数本身),而非函数执行后的返回值,两段代码的运行差异核心就是这个规则导致的。
第一段代码运行失败的原因
你写的impliedVolatility(c_or_p, S, K, T, r,price)属于直接执行函数的写法,会在代码运行到这里的时候立刻调用impliedVolatility,把你提前定义的几个完整列Series作为参数传入,得到的是一个执行结果(大概率是报错值、或者不符合apply输入要求的对象),再把这个结果传给apply,自然无法运行。
同时你传入的K/r/price等参数都是完整的列数据,不是逐行的单个取值,也不符合impliedVolatility单条期权记录计算隐含波动率的逻辑。
第二段代码运行成功的原因
lambda表达式本质是匿名函数,你传给apply的是这个函数本身,不会立刻执行。当apply按axis=1逐行遍历DataFrame时,会把每一行对应的Series对象作为参数传给lambda,再在lambda内部取出当前行的对应字段值,传入impliedVolatility执行计算,完全匹配逐行计算的需求,所以可以正常运行。
内容的提问来源于stack exchange,提问作者xxyyzz
相关产品推荐
相关产品推荐

