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

如何将Excel定义的逻辑运算公式应用到Pandas DataFrame?

解决通过Excel定义逻辑条件为Pandas DataFrame添加布尔列的问题

问题概述

需要从test.xlsx文件的Formula列读取逻辑条件(而非Python硬编码),为Pandas DataFrame生成布尔列,需同时满足三个逻辑:

  • GOOD列值大于Excel定义的阈值
  • BAD列值小于Excel定义的阈值
  • UGLY列不为空值

前置信息

Excel文件test.xlsx结构示例

假设Formula列存储了拆分的三个条件:

Formula
GOOD > 80
BAD < 20
UGLY.notna()

示例DataFrame

import pandas as pd

df = pd.DataFrame({
    'GOOD': [75, 85, 90, 60],
    'BAD': [15, 25, 18, 22],
    'UGLY': ['val1', None, 'val3', 'val4']
})

常见错误尝试

直接使用eval()会因作用域问题无法识别DataFrame列:

formula_df = pd.read_excel('test.xlsx', usecols=['Formula'])
formulas = formula_df['Formula'].tolist()

# 此代码会抛出NameError,因为eval无法识别GOOD/BAD/UGLY列
df['result'] = eval(' & '.join(formulas))

可行解决方案

使用Pandas内置的df.eval()方法,它支持直接引用DataFrame列,且语法兼容Pandas表达式:

import pandas as pd

# 1. 读取Excel中的逻辑条件
formula_df = pd.read_excel('test.xlsx', usecols=['Formula'])
# 合并多个条件为单一逻辑表达式
combined_formula = ' & '.join(formula_df['Formula'].astype(str))

# 2. 读取目标DataFrame(此处用示例数据,实际替换为你的数据源)
df = pd.DataFrame({
    'GOOD': [75, 85, 90, 60],
    'BAD': [15, 25, 18, 22],
    'UGLY': ['val1', None, 'val3', 'val4']
})

# 3. 应用公式生成布尔列
df['result'] = df.eval(combined_formula)

适配Excel风格公式

如果Excel中存储的是Excel原生语法(如NOT(ISBLANK(UGLY))),需先转换为Pandas兼容语法:

# 转换Excel公式为Pandas表达式
formula_series = formula_df['Formula'].astype(str).replace({
    'NOT(ISBLANK(': 'UGLY.notna(',
    '>': ' > ',
    '<': ' < '
})
combined_formula = ' & '.join(formula_series)
df['result'] = df.eval(combined_formula)

最终输出结果

运行代码后,DataFrame将生成符合预期的布尔列:

GOOD  BAD  UGLY  result
0    75   15  val1   False
1    85   25  None   False
2    90   18  val3    True
3    60   22  val4   False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:55:21