从pandas DataFrame导出LaTeX表

Pla*_*Tag 43 python latex dataframe pandas

是否有一种简单的方法可以将数据框(甚至是其中的一部分)导出到LaTeX?

我在谷歌搜索,只能找到使用asciitables的解决方案.

bmu*_*bmu 76

DataFrames有一个to_latex方法:

In [42]: df = pd.DataFrame(np.random.random((5, 5)))

In [43]: df
Out[43]: 
          0         1         2         3         4
0  0.886864  0.518538  0.359964  0.167291  0.940414
1  0.834130  0.022920  0.265131  0.059002  0.530584
2  0.648019  0.953043  0.263551  0.595798  0.153969
3  0.207003  0.015721  0.931170  0.045044  0.432870
4  0.039886  0.898780  0.728195  0.112069  0.468485

In [44]: print df.to_latex()
\begin{tabular}{|l|c|c|c|c|c|c|}
\hline
{} &         0 &         1 &         2 &         3 &         4 \\
\hline
0 &  0.886864 &  0.518538 &  0.359964 &  0.167291 &  0.940414 \\
1 &  0.834130 &  0.022920 &  0.265131 &  0.059002 &  0.530584 \\
2 &  0.648019 &  0.953043 &  0.263551 &  0.595798 &  0.153969 \\
3 &  0.207003 &  0.015721 &  0.931170 &  0.045044 &  0.432870 \\
4 &  0.039886 &  0.898780 &  0.728195 &  0.112069 &  0.468485 \\
\hline
\end{tabular}
Run Code Online (Sandbox Code Playgroud)

您只需将其写入tex文件即可.

默认情况下,latex会将其渲染为:

因为它会出现在乳胶中

注意:该to_latex方法提供了几种配置选项.

  • 在我的情况下,选项`float_format = lambda x:'%10.2f'%x`被证明非常有用.另外,在LaTeX中,我不得不添加`\ usepackage {booktabs}`,因为输出使用需要它的`\ toprule`. (5认同)

Tho*_*anz 6

只需写入文本文件即可.这不是魔术:

import pandas as pd
df = pd.DataFrame({"a":range(10), "b":range(10,20)})
with open("my_table.tex", "w") as f:
    f.write("\\begin{tabular}{" + " | ".join(["c"] * len(df.columns)) + "}\n")
    for i, row in df.iterrows():
        f.write(" & ".join([str(x) for x in row.values]) + " \\\\\n")
    f.write("\\end{tabular}")
Run Code Online (Sandbox Code Playgroud)

  • 嗨,我完全同意.我的理由是:1.我在0.9版本之前开始使用pandas,其中to_latex不可用2.当需要某些调整或有人想要导出到其他格式时,这可能很有用,例如XAML,自定义XML或其他任何格式.但是谢谢你的评论 (4认同)
  • 虽然说明使用普通Python将表格数据导出到LaTeX是多么容易,但使用现有设备当然要好得多,即在这种情况下使用`DataFrame.to_latex()`. (3认同)

Arm*_*sic 5

如果要保存:

with open('mytable.tex', 'w') as tf:
     tf.write(df.to_latex())
Run Code Online (Sandbox Code Playgroud)

  • 实际上,你只需要 `df.to_latex('mytable.tex')` (5认同)