to_latex bug for midrule location · Issue #18326 · pandas-dev/pandas (original) (raw)

There are a lot of other posts (e.g. #14484 #16718 #17959 etc) with bugs in the to_latex() function so this might have a common source.

The midrule location is wrong when the index has a name but index_names=False. This bug shows up even in simple dataframes without multi-indexing like the other bugs open at the moment:

import pandas as pd
import numpy as np
df = pd.DataFrame(data=np.random.randn(5,3))
df.index.name = 'foo'
print df.to_latex(index_names=False)

gives

\begin{tabular}{lrrr}
\toprule
{} &         0 &         1 &         2 \\
0 &  1.898767 & -0.841932 & -1.681799 \\
\midrule
1 &  0.057378 &  0.041809 &  0.612301 \\
2 &  0.799285 &  0.477284 & -0.331426 \\
3 & -0.412104 & -0.680420 & -1.092955 \\
4 & -1.485436 & -1.180868 & -0.063881 \\
\bottomrule
\end{tabular}

It should be

\begin{tabular}{lrrr}
\toprule
{} &         0 &         1 &         2 \\
\midrule
0 &  1.898767 & -0.841932 & -1.681799 \\
1 &  0.057378 &  0.041809 &  0.612301 \\
2 &  0.799285 &  0.477284 & -0.331426 \\
3 & -0.412104 & -0.680420 & -1.092955 \\
4 & -1.485436 & -1.180868 & -0.063881 \\
\bottomrule
\end{tabular}

Also, the width of {} is ignored for the space padding in the index column, which is a bit annoying.

This is from:
Python 2.7.13
numpy==1.13.1
pandas==0.20.3