如何通过CSV中的变量重复执行Jupyter Notebook?
基于Papermill复用Jupyter Notebook并动态传入参数方案
核心场景
- 现有Jupyter Notebook包含依赖
event对象的代码块,后续多个单元格均依赖该对象 - 存在CSV映射文件,存储City、ServiceNow ID与设备的对应关系
- 目标:通过Papermill实现Notebook复用,每次执行时动态传入不同参数
步骤1:改造Notebook,标记可参数化单元格
将原硬编码的event定义单元格,修改为支持Papermill参数注入的格式:
- 在单元格开头添加
# parameters注释(Papermill会识别此标记,将下方变量作为可传入参数) - 将硬编码值替换为变量,再传入
MyEvent构造函数
# parameters city = "CAN" servicenow_id = "123456" devices = ["can-1-server-1"] workflow_name = "PYTHON_WORKER" event = MyEvent({ "city": city, "servicenow_id": servicenow_id, "devices": devices, "workflow_name": workflow_name, })
步骤2:读取CSV映射,批量执行Notebook
编写Python脚本读取CSV文件,遍历每一行的参数组合,调用Papermill执行原Notebook并生成带参数的输出文件:
import papermill as pm import pandas as pd # 读取CSV映射文件(替换为你的CSV路径) df = pd.read_csv('city_device_mapping.csv') # 遍历CSV每行,批量执行Notebook for idx, row in df.iterrows(): # 从CSV行提取参数(需与CSV列名匹配) params = { "city": row['City'], "servicenow_id": row['ServiceNow ID'], "devices": [row['设备']] # 若CSV中设备为多值(如逗号分隔),可改为row['设备'].split(',') } # 执行Notebook,生成带参数的输出文件 pm.execute_notebook( input_path='你的原Notebook路径.ipynb', output_path=f'执行结果_{row["City"]}_{row["ServiceNow ID"]}.ipynb', parameters=params )
步骤3:验证参数传递有效性
在原Notebook中添加一个验证单元格,确认参数是否正确传入event对象:
# 验证参数是否正确注入 print("当前event对象参数:") print(event.__dict__) # 或根据MyEvent类的结构,打印对应属性
内容的提问来源于stack exchange,提问作者Maran Ganesh
相关产品推荐
相关产品推荐

