3 回答
TA贡献1874条经验 获得超12个赞
你不能
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。
如果它不在该列表中,则不能将其称为“数学函数以外的函数调用[不允许语法]”
话虽如此,也许可以在更基本的操作方面实现其中一些功能。在这里,我实现了一个等效于 np.sign
的 eval
。但是IMO混淆了操作太多,并不是很有用,所以真的你需要远离eval
TA贡献1772条经验 获得超8个赞
在“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
希望这有助于他人。
TA贡献1875条经验 获得超5个赞
迟到的答案,但你可以做,和你想要的方式。如果你将后端引擎设置为Python(尽管我认为它相当慢)。似乎至少从Pandas v1.0开始就已经存在了。roundminmaxeval
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
对于 和 操作,您必须弄清楚其他方法(例如,使用 )。floorceilapply
添加回答
举报