Python:对DataFrame使用.apply()调用自定义函数不生效是什么原因?
代码问题排查
- 自定义函数
m的返回值错误:你计算了x.sum()/len(x)的均值结果,但没有把这个结果返回,反而直接返回了传入的原对象x,相当于函数没有输出你预期的计算结果。 apply调用时传参错误:你写的是d.apply(m(),axis=0),这里加括号相当于直接执行m函数,而apply需要接收函数本身作为参数,后续会自动把遍历到的每一行/每一列作为参数传入这个函数,所以只需要填写函数名m即可。
修正后的代码
import pandas as pd d = pd.DataFrame({"A":[50,60,70],"B":[80,90,100]}) def m(x): # 返回计算得到的均值 return x.sum()/len(x) # 按列计算均值,axis=0对应按列遍历 print(d.apply(m, axis=0)) # 按行计算均值修改为axis=1即可 # print(d.apply(m, axis=1))
apply运行逻辑说明
- 当设置
axis=0时,apply会把DataFrame的每一列作为Series对象传入自定义函数,每列执行一次函数,最终把所有列的返回结果拼接为一个Series输出。 - 当设置
axis=1时,apply会把DataFrame的每一行作为Series对象传入自定义函数,逐行计算后返回结果。
如果仅需要计算均值,可以直接调用pandas内置的mean()方法,d.mean(axis=0)或d.mean(axis=1),执行效率比自定义函数更高。
内容的提问来源于stack exchange,提问作者Georgie Baul
相关产品推荐
相关产品推荐

