使用eval调用mean、median计算DataFrame值时报名称未定义错误如何解决?
错误原因
eval(combin)调用逻辑错误:median、mean是Pandas DataFrame对象的内置方法,不存在于当前代码的全局作用域中,直接通过eval在全局搜索对应名称的函数自然会触发name 'median' is not defined报错。- 属性调用逻辑错误:即使解决了
eval的问题,heartdata.combination的写法也是错误的,点语法后会将combination识别为固定的方法名,不会解析为你之前定义的变量,无法对应到你要调用的均值、中位数方法。
修复方案
不推荐使用eval实现该需求,既存在安全隐患,也容易出现作用域匹配问题,可选择以下两种更稳妥的实现方式:
方法1:使用getattr动态获取对象方法
comb_methods = ['median','mean'] for combin in comb_methods: # 直接从DataFrame实例中获取对应名称的方法 calc_method = getattr(heartdata, combin) # 调用方法计算并赋值给新列 heartdata[combin] = calc_method(axis=1)
方法2:使用Pandas内置的agg方法批量计算(更简洁)
无需手动编写循环,一行代码即可完成多聚合指标的计算:
comb_methods = ['median','mean'] heartdata[comb_methods] = heartdata.agg(comb_methods, axis=1)
内容的提问来源于stack exchange,提问作者houda benhar
相关产品推荐
相关产品推荐

