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

使用Python eval()时如何处理含%的变量名公式?

解决Python eval()处理带%的DataFrame列名问题

当你的DataFrame列名包含%这类特殊字符时,直接用eval()会把%解析为取模运算符,以下是两种可行的解决方法:

方法1:使用Pandas内置的df.eval()(推荐)

Pandas的eval()方法原生支持用反引号包裹特殊列名,以此区分运算符和列名:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'x%': [10, 20, 30],
    'y%': [5, 15, 25],
    'z': [2, 4, 6]
})

# 转义特殊列名后的公式
formula = '`x%` + `y%` + z'
result = df.eval(formula)

print(result)
# 输出:0    17
#      1    39
#      2    61
#      dtype: int64

方法2:修改公式后用Python内置eval()

如果必须使用Python原生的eval(),可以先将公式中的特殊列名替换为DataFrame的索引引用(df['列名']),再执行计算:

import pandas as pd

df = pd.DataFrame({
    'x%': [10, 20, 30],
    'y%': [5, 15, 25],
    'z': [2, 4, 6]
})

original_formula = 'x% + y% + z'
# 替换特殊列名为DataFrame的索引形式
escaped_formula = original_formula.replace('x%', "df['x%']").replace('y%', "df['y%']")

# 定义命名空间,传入df和z的值
namespace = {'df': df, 'z': df['z']}
result = eval(escaped_formula, namespace)

print(result)
# 输出和方法1一致

注意:Python原生变量名不允许包含%,所以无法直接把x%作为变量传入eval()的命名空间,必须通过索引引用的方式处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:12:38