【发布时间】:2018-04-18 13:04:52
【问题描述】:
我想做的是解析这样一个表达式:
result = A + B + sqrt(B + 4)
其中 A 和 B 是数据框的列。所以我必须像这样解析表达式才能得到结果:
new_col = df.B + 4
result = df.A + df.B + new_col.apply(sqrt)
df 是数据框。
我尝试过使用re.sub,但最好只替换列变量(而不是函数),如下所示:
import re
def repl(match):
inner_word = match.group(1)
new_var = "df['{}']".format(inner_word)
return new_var
eq = 'A + 3 / B'
new_eq = re.sub('([a-zA-Z_]+)', repl, eq)
result = eval(new_eq)
所以,我的问题是:
- 是否有 python 库可以做到这一点?如果没有,我怎样才能以简单的方式实现这一目标?
- 创建递归函数可能是解决方案?
- 如果我使用“反向波兰符号”可以简化解析?
- 我必须使用
ast模块吗?
【问题讨论】:
-
你试过
result = df["A"] + df["B"] + sqrt(df["B"] + 4)吗?它应该工作 -
@DimuthTharakaMenikgama 阅读了完整的问题,它不仅是相同的表达方式。
-
你能展示你的数据框吗?(至少几行)?
-
如果我按照你说的那样使用
sqrt函数,我会收到此错误TypeError: cannot convert the series to <class 'float'>。所以函数必须和apply一起使用 -
数据框可以有
float64值、int32值,甚至numpy.nan值。
标签: python python-3.x pandas dataframe text-parsing