gpt4 book ai didi

python - 如何评估包含已定义函数的表达式并返回数值解

转载 作者:太空宇宙 更新时间:2023-11-04 01:47:04 26 4
gpt4 key购买 nike

我正在将 R 代码转换为 python,但我在 nsolve 函数中遇到了一些错误。

我正在尝试评估一个包含由函数定义的 ifelse 语句的表达式,我的代码取得了进展,但我无法处理变量字典,我只需要一个数字解决方案,因为这一个使用simpy包的nsolve函数,你可以在下面看到我的代码:

from sympy import Symbol, solve, nsolve
from sympy.parsing.sympy_parser import parse_expr
import pandas as pd

#Defining ifelse function

def ifelse(cond,yes,no):
if (cond):
return(yes)
else:
return (no)
data = {'A': [10,20,30],
'B': [20,10,40],
'FX': ["ifelse(A>B,A-B-x,A+B-x)","ifelse(A+B>20,A+B-x,A*B-x)","ifelse(A<B,A*B-x,A+B-x)"]}
df = pd.DataFrame(data)

x = Symbol("x", real=True)
cols= df.columns
for row in df.iterrows():
print(nsolve(parse_expr(row["FX"],local_dict=dict({c:row[c] for c in cols}, **{'x':x}) ),x,0))

代码需要返回 30,30,1200 作为解决方案,但它们会出现以下错误:

TypeError: tuple indices must be integers or slices, not str

在字典中,我使用了for,因为真实的数据集有数百列,而要解决的函数使用了其中的许多列。

有人知道如何解决这个问题吗?

最佳答案

row 是一个元组,而不是字典或 pandas 数据系列。为了使代码正常工作,请尝试改用 df.iterrows()。

for _, row in df.iterrows():
row["FX"]

编辑:此外,函数 ifelse 也应该在字典中定义,因为 parse_expr 无法识别它。所以命令应该是

for _, row in df.iterrows():
print(nsolve(parse_expr(row["FX"], local_dict=dict({c:row[c] for c in cols},
**{'x':x, "ifelse": ifelse})),x,0))

关于python - 如何评估包含已定义函数的表达式并返回数值解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58864252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com