如何通过Excel表格Formula列调用Python函数更新DataFrame列?
可行,实现方案如下
完全可以通过Excel的Formula列直接调用已定义的Python函数,后续仅更新Excel即可,无需修改代码。核心思路是读取Excel中的公式配置,动态解析并调用对应函数,具体实现步骤如下:
1. 调整代码逻辑,保留Formula列
首先修改现有代码,不要只提取Column列,同时保留Formula列用于后续函数调用:
import pandas as pd # 读取Excel中的列配置表格 tbl_cols = xlsx_table(filename, sheetname='Sheet1', table='New_Columns') tbl_cols = pd.DataFrame(tbl_cols) # 筛选Type为A的行,保留列名和公式两列 target_cols = tbl_cols.loc[tbl_cols['Type'] == "A", ['Column', 'Formula']]
2. 动态解析公式并调用函数
遍历筛选后的配置行,解析Excel中的公式字符串,动态调用已定义的Python函数并为DataFrame列赋值:
# 遍历每一行配置 for _, row in target_cols.iterrows(): col_name = row['Column'] formula = row['Formula'] # 解析函数名和参数(假设Excel公式格式为「函数名(参数名)」,参数为你的目标DataFrame变量名) # 示例:从"status(doc)"中提取函数名"status"和参数"doc" func_name = formula.split('(')[0].strip() param_name = formula.split('(')[1].rstrip(')').strip() # 获取已定义的函数(假设函数在全局作用域中) try: func = globals()[func_name] # 获取参数对应的DataFrame(比如你的目标DataFrame变量是doc) target_df = locals().get(param_name) or globals().get(param_name) # 调用函数并赋值给对应列 doc[col_name] = func(target_df) except KeyError: raise ValueError(f"错误:未找到定义的函数 {func_name}") except NameError: raise ValueError(f"错误:未找到参数对应的DataFrame {param_name}")
注意事项
- 统一Excel公式格式:确保Excel中Formula列的格式为
函数名(DataFrame变量名),比如你的目标DataFrame是doc,就写status(doc)而非status(dataframe),避免参数匹配错误。 - 扩展多参数支持:如果函数需要多个参数,可以修改解析逻辑,拆分逗号分隔的参数(比如
calc_value(doc, date)),示例解析代码:params_str = formula.split('(')[1].rstrip(')').split(',') params = [p.strip() for p in params_str] # 转换参数为对应的变量 param_values = [locals().get(p) or globals().get(p) for p in params] doc[col_name] = func(*param_values) - 错误处理增强:可以根据需求添加更多异常捕获(比如函数调用参数不匹配),让错误提示更清晰,便于后续维护。
后续只需在Excel中更新列配置(新增/修改Type、Column、Formula),同时确保新增的函数已在代码中定义,即可自动完成DataFrame列的添加与赋值,无需修改代码。
内容的提问来源于stack exchange,提问作者Matheus Assumpção Solinho
相关产品推荐
相关产品推荐

