在pandas中对to_latex的单独列进行对齐

10 投票
2 回答
3401 浏览
提问于 2025-04-18 09:51

我正在使用 pandasto_latex 方法把一个数据表转换成 LaTeX 格式的 tabular 表格。不过,我没有找到可以改变生成的表格对齐方式的选项。比如,我有一个数据表看起来是这样的:

In [46]: df
Out[46]: 
    Number of days  Tuples Distinct Tuples
162             29  700587           41300
163             20  497599           29302
164             15  365599           21382
165             10  256903           14916
166              5  127647            7441
167              2   54254            3117
168              1   26987            1288

而我输出的表格看起来是这样的:

In [50]: print df.to_latex(index=None)
\begin{tabular}{lll}
\toprule
Number of days &  Tuples & Distinct Tuples \\
\midrule
            29 &  700587 &           41300 \\
            20 &  497599 &           29302 \\
            15 &  365599 &           21382 \\
            10 &  256903 &           14916 \\
             5 &  127647 &            7441 \\
             2 &   54254 &            3117 \\
             1 &   26987 &            1288 \\
\bottomrule
\end{tabular}

我想把 {lll} 的对齐方式改成 {rrr}。一般来说,我甚至可能想要不同列有不同的对齐方式,或者在 {r|r|r} 的设计中使用竖线分隔符 |。

现在支持这样做吗?

2 个回答

13

到现在为止(pandas 版本 0.17.1),to_latex 方法已经有了 column_format 这个参数,所以你可以很简单地这样做:

print df.to_latex(index=None, column_format='rrr')
5

在pandas的代码中(这个函数是用来生成latex表格的),你可以看到:https://github.com/pydata/pandas/blob/master/pandas/core/format.py#L492,目前还不支持。如果你的数据是numpy的数字,它会被正确格式化。在Python中,格式化你的列是非常简单的。

print df.to_latex(index=None).replace('lll','rrr')

或者你也可以用更通用的方法,使用正则表达式替换。

撰写回答