使用正则表达式和eval()进行符号计算

时间:2018-12-19 17:43:41

标签: python regex pandas symbolic-math

我正在尝试在python / pandas中构建通用现金流模型,该模型将由

'Profit =收入成本'

'Capital = Capital [T-1] + Profit'

'3YearProfit = Profit [T-2:]。sum()'

'Capital [0] = 100'

该模型将构建到熊猫数据框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中定义的字符串

理想情况下,表达式可能会非常复杂,因此它将替换为eval(parsedExpression)以产生实际结果,从而使其从[expression]变为[parsedExpression]。因此,识别Python / numpy / pandas关键字和语法的解析器比仅仅识别+,-,*,/

之类的少数运算符要有用得多。

有没有这样的解析器,我如何访问它以及有关如何设置过程的任何线索?

0 个答案:

没有答案