首页 > 解决方案 > 使用正则表达式和 eval() 进行符号计算

问题描述

我正在尝试在 python / pandas 中建立一个通用的现金流模型,该模型将由诸如

'利润=收入-成本'

'资本=资本[T-1]+利润'

'3YearProfit=利润[T-2:].sum()'

'资本[0​​]=100'

等等

该模型将被构建到 pandas 数据框 df 中,其中每一行代表一段现金流(例如几个月或季度)。第一行指的是第一个时段(时间 0),第二行指的是下一个时段,依此类推。

上述每个表达式都需要转换为对数据帧行的迭代,例如

for ndx in df.index: 
    df.loc[df.index[ndx],'Profit']=df.loc[df.index[ndx],'Revenue']-df.loc[df.index[ndx],'Cost']
    df.loc[df.index[ndx],'Capital']=df.loc[df.index[ndx-1],'Capital']+df.loc[df.index[ndx],'Profit']
    df.loc[df.index[ndx],'3YearProfit']=df.loc[df.index[ndx-2:],'Profit'].sum()

for 循环将根据表达式更新所有变量,从 T=0 到数据帧中的最后一个周期(最后一行)。

理想情况下,正则表达式解析器将在字符串表达式中识别那些将被视为变量名的字符串,另外还有一个选项是 [x] 或 [x:y] 后缀,其中 x, y 都 <0 并且表示句点数在当前的之前。如果没有后缀,则假定指的是时间T,即相当于[0]。

为避免混淆,允许的模型变量可能应在 modelVarList 系列或字典中声明,以便正则表达式仅尝试在 modelVarList 中定义的字符串

理想情况下,表达式可能非常复杂,因此它会从 [expression] 变为 [parsedExpression],并对 eval(parsedExpression) 进行替换以产生实际结果。因此,识别 Python / numpy / pandas 关键字和语法的解析器将比仅识别少数运算符(如 +、-、*、/)更有帮助。

是否有这样的解析器可用,我如何访问它以及如何设置进程的任何线索?

标签: pythonregexpandassymbolic-math

解决方案


推荐阅读