首页 > 解决方案 > 在 pandas eval 中调用 round()、ceiling()、floor()、min()、max()

问题描述

正如标题所说,有没有办法在 pandas eval 中支持圆形、天花板、最小值、最大值、地板功能。

数据框:

import pandas as pd
import numexpr as ne
op_d = {'ID': [1, 2,3],'V':['F','G','H'],'AAA':[0,1,1],'E':[102014,112019,122017] ,'D':['2019/02/04','2019/02/01','2019/01/01'],'DD':['2019-12-01','2016-05-31','2015-02-15'],'CurrentRate':[7.5,2,2],'NoteRate':[2,3,3],'BBB':[0,00,4],'Q1':[2,8,00],'Q2':[3,5,7],'Q3':[5,6,8]}
df = pd.DataFrame(data=op_d)

abs() 和 sqrt() 函数适用于 pandas eval。IE

df.eval('TT = abs(sqrt(Q1+Q2)-Q2)',inplace=True)
df

谁能建议如何访问 eval 中的其余功能?我还在 eval 中尝试了“local_dict”,看看我是否可以定义自定义函数并调用它们,但它没有用。

笔记:

  1. 这些函数内部的算术运算是必要的(即两列的求和、乘法、div)。
  2. 我知道有关使用“评估”功能和进行必要测量的问题。

标签: pythonpandaseval

解决方案


你不能

DataFrame.eval支持一组有限的数学运算

除左移 (<<) 和右移 (>>) 运算符外的算术运算,例如,df + 2 * pi / s ** 4 % 42 - the_golden_ratio

数学函数:sin、cos、exp、log、expm1、log1p、sqrt、sinh、cosh、tanh、arcsin、arccos、arctan、arccosh、arcsinh、arctanh、abs、arctan2 和 log10。

如果它不在该列表中,则不能调用它,因为“数学函数以外的函数调用[不允许语法]”


话虽如此,也许可以根据更基本的操作来实现其中的一些功能。在这里,我实现了eval等效的np.sign. 但是 IMO 过于混淆了操作并且不是很有用,所以你真的需要远离eval


推荐阅读