熊猫数据框作为latex或html表nbconvert

熊猫数据框作为latex或html表nbconvert,latex,ipython,ipython-notebook,pdflatex,Latex,Ipython,Ipython Notebook,Pdflatex,使用nbconvert to latex&PDF时,是否可以从ipython笔记本中的熊猫数据框中获得格式良好的表格 默认设置似乎只是一个左对齐的数字块,字体看起来很粗糙 我希望有一些更像笔记本中数据帧的html显示,或者一个latex表。保存和显示HTML呈现的数据帧的.png图像也可以,但如何准确地做到这一点已被证明是难以捉摸的 最低限度,我只想在一个漂亮的字体简单的中心对齐表 我没有任何运气尝试使用.to_latex()方法从pandas数据帧中获取latex表,无论是在笔记本中还是在nb

使用nbconvert to latex&PDF时,是否可以从ipython笔记本中的熊猫数据框中获得格式良好的表格

默认设置似乎只是一个左对齐的数字块,字体看起来很粗糙

我希望有一些更像笔记本中数据帧的html显示,或者一个latex表。保存和显示HTML呈现的数据帧的.png图像也可以,但如何准确地做到这一点已被证明是难以捉摸的

最低限度,我只想在一个漂亮的字体简单的中心对齐表

我没有任何运气尝试使用.to_latex()方法从pandas数据帧中获取latex表,无论是在笔记本中还是在nbconvert输出中。我还尝试(在阅读了ipython开发列表讨论之后,并遵循了自定义显示逻辑笔记本示例)使用_repr_html_uu和_repr_latex_u方法创建自定义类,分别返回_to_html()和_to_latex()的结果。我认为nb转换的一个主要问题是pdflatex对dataframe to_latex()输出中的{或//都不满意。但我不想在检查是否遗漏了某些内容之前就开始摆弄它


谢谢。

我为此编写了我自己的基于
mako
的模板方案。我认为如果你承诺自己一次完成它,这实际上是一个相当简单的工作流程。之后,你开始看到模板化所需格式的元数据,以便可以将其从代码中分离出来(并且不代表第三方依赖)是一个很好的解决方法

这是我提出的工作流程

  • 编写.mako模板,该模板接受数据帧作为参数(可能还有其他参数),并将其转换为所需的TeX格式(下面的示例)

  • 制作一个包装类(我称之为
    to_-tex
    ),用于生成所需的API(例如,您可以将其传递给数据对象,并在内部处理对
    mako
    渲染命令的调用)

  • 在wraper类中,决定您希望输出的方式。将TeX代码打印到屏幕上?使用子进程将其实际编译为pdf

  • 在我的案例中,我正在为一篇研究论文生成初步结果,需要将表格格式化为具有嵌套列名等的复杂的双排序结构。下面是其中一个表格的示例:

    以下是用于此的mako模板(警告,总量):

    我的选择是直接将TeX字符串泵送到
    pdflatex
    ,然后作为显示它的选项离开

    下面是一段将其与数据帧一起实际使用的代码:

    # Assume calculation work is done prior to this ...
    all_beta  = pandas.concat([beta_df,  beta_tstat_df], axis=0)
    all_alpha = pandas.concat([alpha_df, alpha_tstat_df], axis=0)
    all_df = pandas.concat([all_beta, all_alpha], axis=1)
    
    # Render result in TeX
    tex_mako  = "/my_project/templates/mako/two_panel_double_sort_table.mako"
    tex_file = "/my_project/some_tex_file_name.tex"
    
    from mako.template import Template
    t = Template(filename=tex_mako)
    tex_str = t.render(all_df, table_title, group_var, tex_risk_name)
    
    import my_project.to_tex as to_tex
    tex_obj = to_tex.to_tex(tex_str, tex_file)
    

    本文讨论了一种更简单的方法。基本上,您必须向DataFrame类添加一个
    \u repr\u latex\u
    方法,这是一个非常简单的过程

    我在这样一个笔记本上做的:

    import pandas as pd
    
    pd.set_option('display.notebook_repr_html', True)
    
    def _repr_latex_(self):
        return "\centering{%s}" % self.to_latex()
    
    pd.DataFrame._repr_latex_ = _repr_latex_  # monkey patch pandas DataFrame
    
    以下代码:

    d = {'one' : [1., 2., 3., 4.],
         'two' : [4., 3., 2., 1.]}
    df = pd.DataFrame(d)
    df
    
    如果在笔记本中实时计算,则转换为HTML表格,并转换为PDF格式的(居中)表格:

    $ ipython nbconvert --to latex --post PDF notebook.ipynb
    

    现在可用的最简单方法是将数据帧显示为降价表。您可能需要为此安装

    在代码单元中,显示数据帧时,请使用以下命令:

    从IPython.display导入标记,显示
    显示(标记(df.to_Markdown()))
    

    由于这是一个降价表,nbconvert可以很容易地将其转换为latex。

    这很好,您有机会将其制作成一个包(或者再制作一次pr)我们真的应该为IPython提供一个表包,它有很多格式!那会很有趣。也许在假期休息期间我可以做到,但没有承诺。你不需要创建自定义类来将格式化程序添加到现有类中:而且,没有熊猫没有办法从表IIRC生成latex。我在这里做了类似的事情,但我不满意解决方案。这很方便。我定义了一个简单的自定义类,该类继承了dataframe数据类型,并添加了一个类似的repr_latex方法和格式化等。我想直接修补dataframe类更轻量级。您好,做得好!我还添加了“escape=False”对于to_latex方法,因为我喜欢使用latex样式的字符串作为列名。我提交了一个,它刚刚被合并到下一个pandas版本(0.18)中这解决了这个问题。因此,从该版本开始,转换应该会顺利进行。我得到
    没有名为PDF的模块,但是,第一个表之后的所有内容都集中在我的PDF中。对我来说,这很有效。我想问一下,如果数据框设置了样式,例如,如果突出显示了一行,您会怎么做?简单有效。Thanks!
    
    d = {'one' : [1., 2., 3., 4.],
         'two' : [4., 3., 2., 1.]}
    df = pd.DataFrame(d)
    df
    
    $ ipython nbconvert --to latex --post PDF notebook.ipynb