python - 如何使用 nbconvert+pandoc 在 pdf 中呈现 pd.DataFrame 表
问题描述
我正在从一组 Jupyter 笔记本中生成 pdf。对于每个 .ipynb 文件,我正在运行
$ jupyter-nbconvert --to markdown Untitled1.ipynb
然后将它们合并在一起:
$ pandoc Untitled1.md [Untitled2.md ...] -f gfm --pdf-engine=pdflatex -o all_notebooks.pdf
(我主要关注这里的示例。)我注意到的一件事是熊猫数据帧,例如
import pandas as pd
df = pd.DataFrame({'a':[1,2,3]})
df.head()
在pdf中呈现为
而不是
知道如何解决这个问题吗?我正在使用$ jupyter-nbconvert --version 5.6.1
和$ pandoc --version 2.9.2.1
。在md
文件中,表格变成了下面的 html 块。我怀疑 pandoc 没有正确解释它。我尝试了此处from-markdown-strict
建议的选项,但没有任何运气。
谢谢!
<div>
<style scoped>
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th></th>
<th>a</th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>1</td>
</tr>
<tr>
<th>1</th>
<td>2</td>
</tr>
<tr>
<th>2</th>
<td>3</td>
</tr>
</tbody>
</table>
</div>
解决方案
这里的问题是 nbconvert 将 DataFrames 视为 HTML(加上您在输出中看到的样式,issue here),它被 pandoc 的 Markdown 转换器忽略。
解决此问题的一种方法是更改 pandas 的行为,使其不在笔记本中将 DataFrame 写为 HTML。您可以通过在每个笔记本顶部设置选项来执行此操作:
pd.set_option("display.notebook_repr_html", False)
另一种选择是使用 HTML 表示作为中间步骤而不是 Markdown:
$ jupyter-nbconvert --to html Untitled1.ipynb
$ pandoc Untitled1.html -t latex --pdf-engine=pdflatex -o all_notebooks.pdf
当然,如果您不需要进行其他格式化,您可以直接将笔记本保存为 pdf:
jupyter-nbconvert --to pdf Untitled1.ipynb
(要组合多个笔记本,请参阅此处的讨论。)
推荐阅读
- bash - 如何在 .bashrc 中将别名功能与 conda 初始化相结合
- python - 将用户信息保存在文件中
- python - 如何在python中的帧上实时显示人脸检测?
- jquery - 使用每个选项的值更改选择选项颜色
- ios - 将 UINavigationBar 标题与右侧的按钮对齐,如 iOS13 Messages 应用程序
- python - 在kivy中获取自定义小部件的“高度”属性
- ios - “由于未捕获的异常而终止应用程序”在推送视图控制器时崩溃
- ionic-framework - 如何在ionic项目中使用fabric js(html5-Canvas库)自定义构建
- php - 如何哈希密码注册?
- html - 从 HTML 选择标签调用 TS 函数不能正常工作