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

如何在Pandas中向量化计算批量表达式?

批量计算DataFrame中表达式列的解决方案

问题原因

你用pd.eval(df["expressions"], local_dict=dict_all_values)失败的核心原因是:pd.eval的作用是解析单个字符串表达式,而非逐行处理Series中的每个表达式。它会把整个Series的内容拼接成一个大表达式尝试计算,自然返回结果数量和实际表达式数量不匹配。

高效解决方法

方法1:列表推导 + 内置eval

这是最直接且高效的方式,适合2万级别的数据量:

import pandas as pd

# 示例数据
df = pd.DataFrame({"expressions": ["A + B", "B + C", "A * C"]})
dict_all_values = {"A": 5, "B": -2.1, "C": 3.5}

# 批量计算每个表达式
df["result"] = [eval(expr, {}, dict_all_values) for expr in df["expressions"]]

这里用空字典作为全局命名空间,仅传入你的本地字典作为局部命名空间,避免污染全局变量,同时保证计算准确。

方法2:apply结合内置eval

如果习惯DataFrame的链式操作,也可以用apply:

df["result"] = df["expressions"].apply(lambda expr: eval(expr, {}, dict_all_values))

对于2万条数据,apply的执行速度和列表推导差距不大,可根据代码风格选择。

方法3:构造批量表达式用pd.eval计算

如果想利用pd.eval的优化能力,可以把每个表达式转换成引用字典的形式,再批量计算:

# 将表达式中的变量替换为字典键的引用
df["formatted_expr"] = df["expressions"].replace(
    pattern=list(dict_all_values.keys()),
    repl=[f"dict_all_values['{k}']" for k in dict_all_values.keys()],
    regex=True
)

# 拼接成批量表达式并用pd.eval计算
df["result"] = pd.eval(f"[{','.join(df['formatted_expr'])}]")

这种方式能借助pd.eval的底层优化,适合数据量更大的场景。

内容的提问来源于stack exchange,提问作者Brayan Muñoz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:21:01