Comment créer une table df_toLatex () sur plusieurs pages? PyLatex - Pandas - Python

Oct 13 2020

Je souhaite générer un rapport pour un processus spécifique avec un long dataframe sur plusieurs pages. Mais quand j'essaye de le générer, le tableau n'est que sur une seule page et non pas entier. J'essaye le package longtablemais ça ne marche pas.

Voici mon code actuel (MISE À JOUR):

import pandas as pd
import pylatex as pl

df = pd.DataFrame(dict(x=range(256),y=['same']*256))

doc = pl.Document()

doc.packages.append(pl.Package('booktabs'))
doc.packages.append(pl.Package('longtable'))

with doc.create(pl.Section('Table: Global Faults ')):
    with doc.create(pl.Table(position='htbp')) as table:
        table.add_caption('Five first')
        table.append(pl.Command('centering'))
        table.append(pl.NoEscape(df.to_latex(longtable=True)))


doc.generate_pdf(filepath=f'Global_Fault', clean_tex=False) 

Réponses

Marijn Oct 13 2020 at 16:24

L' longtableenvironnement n'est pas censé être utilisé à l'intérieur d'un tableenvironnement. La légende doit être fournie comme argument de df.to_latex. Le centrage est par défaut.

MWE:

import pandas as pd
import pylatex as pl

df = pd.DataFrame(dict(x=range(256),y=['same']*256))

doc = pl.Document()

doc.packages.append(pl.Package('booktabs'))
doc.packages.append(pl.Package('longtable'))

with doc.create(pl.Section('Table: Global Faults ')):
    doc.append(pl.NoEscape(df.to_latex(longtable=True,caption='Five first')))

doc.generate_pdf(filepath=f'Global_Fault', clean_tex=False)

LaTeX généré:

\begin{document}%
\normalsize%
\section{Table: Global Faults }%
\label{sec:TableGlobalFaults}%
\begin{longtable}{lrl}
\caption{Five first}\\
\toprule
{} &    x &     y \\
\midrule
\endhead
\midrule
\multicolumn{3}{r}{{Continued on next page}} \\
\midrule
\endfoot

\bottomrule
\endlastfoot
0   &    0 &  same \\
1   &    1 &  same \\
% etc.

Résultat:

[...]