使用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
相关产品推荐
相关产品推荐

