You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame列中解析并计算字符串形式的表达式

如何计算DataFrame中每行字符串形式的表达式?

我明白你的问题了——当你想用eval()计算DataFrame每行calc列里的表达式时,直接调用它会找不到列名对应的变量,因为eval默认是在全局/局部命名空间里查找,而不是每行的DataFrame行数据中。下面给你几个可行的解决办法:

方法一:用apply结合eval传递行变量

我们可以定义一个函数,把每行的数据转成字典,作为eval的局部变量传入,这样表达式里的a、b就能匹配到当前行对应列的值了:

import pandas as pd

calcs = {'a': [1,1], 'b': [1,1], 'c': [1,1], 'calc': ['a*b','a+b']}
df = pd.DataFrame(calcs)

def calculate_row(row):
    # 将行数据转为字典,作为eval的局部变量环境
    return eval(row['calc'], globals(), row.to_dict())

# 对每行应用计算函数
df['result'] = df.apply(calculate_row, axis=1)
print(df)

运行后你会得到预期的结果:

a  b  c  calc  result
0  1  1  1  a*b       1
1  1  1  1  a+b       2

方法二:用列表推导式简化代码

如果觉得定义函数有点繁琐,也可以用列表推导式直接遍历每行数据,代码更简洁:

df['result'] = [eval(expr, globals(), row) for expr, row in zip(df['calc'], df.to_dict('records'))]

这里df.to_dict('records')会把DataFrame转换成一个字典列表,每个字典对应一行的键值对,再和calc列的表达式一一配对传入eval。

重要提醒

注意:eval()会执行任意字符串代码,如果你的calc列数据来自不可信的外部来源,这个方法存在安全风险。这种情况下,建议先对表达式内容做严格校验,或者使用更安全的表达式解析库(比如sympy来处理数学表达式)。

内容的提问来源于stack exchange,提问作者CMASolutions

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 04:09:20