python - 使用正则表达式和 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 关键字和语法的解析器将比仅识别少数运算符(如 +、-、*、/)更有帮助。
是否有这样的解析器可用,我如何访问它以及如何设置进程的任何线索?
解决方案
推荐阅读
- javascript - 使用lookbehind忽略两个匹配项之间的字符串,但无论如何都要捕获它
- java - 如何使用 SSL/SSH 工作示例连接 SecureAS400
- web3 - 信任钱包 dapp 连接并签名传输消息
- wordpress - WP_User_Query 中断并忽略它下面的所有代码
- security - 隐藏从后端获取的用户数据
- neo4j - 在 neo4j 中获取可选数据的最快方法
- youtube - 如何通过 v3 API 检测 youtube 视频是否包含付费推广
- javascript - Javascript加入不适用于创建的数组
- python - Python,使用相对路径导入的模拟
- reactjs - React 中的上传列表状态管理