Quarto技术问询:能否传递dataframe作为参数并从Python脚本触发?
问题解答
1. 向Quarto传递DataFrame参数
Quarto无法像RMarkdown那样直接通过render命令传递DataFrame这类复杂对象,但可以通过序列化+文件加载的方式实现:
- 步骤1:在Python脚本中将DataFrame序列化保存到文件(推荐用Parquet/Feather,比Pickle更高效且跨语言)
import pandas as pd df = pd.DataFrame({"x": [1,2,3], "y": [4,5,6]}) df.to_parquet("input_data.parquet") - 步骤2:在Quarto文档(
.qmd)中加载该文件并使用:# 在.qmd的代码块中 import pandas as pd df = pd.read_parquet("input_data.parquet") # 后续处理df
如果需要传递alpha、beta这类简单参数,可继续使用-P参数,和你当前的用法一致。
2. 从Python脚本触发Quarto执行
除了os.system,更推荐以下两种更灵活的方式:
方式一:使用subprocess模块(可控性更强)
替换os.system,可以捕获执行输出、错误信息,还能自定义工作目录:
import subprocess # 执行渲染,传递简单参数并指定输出路径 result = subprocess.run( [ "quarto", "render", "plot_demo.qmd", "-P", "alpha:0.1", "-P", "beta:0.2", "--output-dir", "./output", "--output-file", "rendered_report.html" ], capture_output=True, text=True ) # 检查执行结果 if result.returncode == 0: print("渲染成功") else: print("渲染失败,错误信息:", result.stderr)
方式二:使用Quarto Python API(贴近RMarkdown的写法)
先安装Quarto的Python包:
pip install quarto
然后直接调用quarto.render()函数,支持参数传递、输出路径配置,结合前面的DataFrame序列化方案使用:
import quarto import pandas as pd # 先保存DataFrame到文件 df = pd.DataFrame({"x": [1,2,3], "y": [4,5,6]}) df.to_parquet("input_data.parquet") # 调用render渲染文档 quarto.render( input="plot_demo.qmd", params={"alpha": 0.1, "beta": 0.2}, output_dir="./output", output_file="rendered_report.html" )
内容的提问来源于stack exchange,提问作者tallharish
相关产品推荐
相关产品推荐

