在Pandas DataFrame中使用eval计算两列最大值遇报错如何解决?
解决pandas df.eval无法使用maximum计算列最大值的问题
问题原因
pandas的df.eval()默认解析器不支持直接调用maximum这个ufunc,即使指定engine='python',也因命名空间限制无法直接使用该函数。
可行解决方案
方法一:使用np.maximum结合engine='python'
利用pandas eval环境中默认可用的np别名,直接调用numpy的元素级最大值函数:df = pd.DataFrame( {'a':[1,3,5], 'b':[6,4,2] } ) df['c'] = df.eval('np.maximum(a, b)', engine='python')该写法和你原本的
maximum(df.a, df.b)逻辑完全一致,同时保持了表达式的可读性。方法二:用pandas where方法实现
不依赖numpy,直接通过Series的where方法实现元素级最大值判断:df['c'] = df.eval('a.where(a > b, b)')当
a的值大于b时保留a,否则取b的值,最终得到两列的元素级最大值。方法三:注册自定义函数(适合频繁使用场景)
如果你需要多次在df.eval()中使用maximum,可以将其注册到eval的局部命名空间:import pandas as pd from numpy import maximum @pd.eval.register def register_maximum(expr, **kwargs): return pd.eval(expr, local_dict={'maximum': maximum}, **kwargs) # 注册后即可直接使用 df['c'] = df.eval('maximum(a, b)')
内容的提问来源于stack exchange,提问作者Sanjay Manohar
相关产品推荐
相关产品推荐

