R语言:将数据框字符串列转为公式并计算结果的异常问题
解决数据框字符串公式批量计算问题
问题原因
直接用eval()批量赋值时,因Python变量作用域或循环变量引用的特性,会导致所有行复用最后一次eval的执行结果。
解决方法
方法1:用pandas.DataFrame.apply()逐行处理
假设数据框为df,所需变量已在当前环境定义,通过apply对每行的Formula列单独执行eval:
import pandas as pd # 示例变量 x = 2 y = 3 # 示例数据框 df = pd.DataFrame({ 'Formula': ['x + y', 'x * y', 'x**2 + y'] }) # 逐行计算公式结果 df['results'] = df['Formula'].apply(lambda expr: eval(expr))
方法2:手动循环逐行赋值
也可通过遍历数据框行,逐个计算并赋值:
df['results'] = 0 # 初始化结果列 for idx, row in df.iterrows(): df.loc[idx, 'results'] = eval(row['Formula'])
额外注意
- 若变量不在全局作用域,可通过字典传入自定义环境,避免作用域问题:
vars_dict = {'x': 2, 'y': 3} df['results'] = df['Formula'].apply(lambda expr: eval(expr, vars_dict)) - 请勿用
eval()处理不可信来源的字符串公式,存在代码注入风险。
内容的提问来源于stack exchange,提问作者Tagli94
相关产品推荐
相关产品推荐

