在pandas-eval中调用round()、ceiling()、floor()、min()、max()



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

DataFrame:

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。即

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

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

注:

  1. 这些函数中的算术运算是必要的(即两列的和、乘、div(
  2. 我知道有关"eval"函数的使用和采取必要措施的问题

你不能

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、arcsingh、arctanh、abs、arctan2和log10。

如果它不在该列表中,则不能调用它,因为">除数学函数之外的函数调用[不允许语法]">


也就是说,可能通过更基本的操作来实现其中的一些功能。在这里,我实现了eval的等效np.sign。但是IMO混淆了操作太多,也不是很有用,所以你真的需要远离eval

在'py_expression_eval'库的帮助下,我能够在用户定义的函数中进行算术运算。

from py_expression_eval import Parser
parser = Parser()
dct = {'Q1':df['Q1'],'Q2':df['Q2'],'max':max1,'round':getround}
df['check']=parser.parse('round(Q1/Q2)').evaluate(dct)

库源:https://github.com/Axiacore/py-expression-eval

希望这能帮助其他人。

答案较晚,但您可以按照自己的意愿执行roundminmax。如果您将eval中的后端引擎设置为Python(尽管我认为它相当慢(。似乎至少从Pandas v1.0开始就存在了。

df.eval('TTR = TT.round(2)', engine='python', inplace=True)
df.eval('TT_min = TT.min()', engine='python', inplace=True)
df.eval('TT_max = TT.max()', engine='python', inplace=True)
df

对于floorceil操作,您必须了解其他内容(例如使用apply(。

最新更新