Home > OS >  Transposed dataframe to LaTeX
Transposed dataframe to LaTeX

Time:02-05

I am not able to change the number format in the LaTeX output of the library Pandas.

Consider this example:

import pandas as pd

values = [ { "id":"id1", "c1":1e-10, "c2":int(1000) }]
df = pd.DataFrame.from_dict(values).set_index("id")
print(df)

with output:

               c1    c2
id                     
id1  1.000000e-10  1000

Let's say that I want c1 formatted with two decimal places, c2 as an integer:

s = df.style
s.clear()
s.format({ "c1":"{:.2f}", "c2":"{:d}" })
print(s.to_latex())

with output:

\begin{tabular}{lrr}
 & c1 & c2 \\
id &  &  \\
id1 & 0.00 & 1000 \\
\end{tabular}

However, I do not need a LaTeX table for df but for df.T.

Question: since I can specify the styles only for the columns (at least it seems so in the docs), how can I specify the row-based output format for df.T?

If I simply write this:

dft = df.T
s2 = dft.style
# s2.clear()   # nothing changes with this instruction
print(s2.to_latex())

it is ever worse as I get:

\begin{tabular}{lr}
id & id1 \\
c1 & 0.000000 \\
c2 & 1000.000000 \\
\end{tabular}

where even the integer (the one with value int(1000)) became a float using the default style/format.

I played with the subset parameter and various slices with no success.

CodePudding user response:

As workaround, you can format each value to its correct one with:

fmt = { "c1":"{:.2f}", "c2":"{:d}" }
df_print = df.apply(lambda x: [fmt[x.name].format(v) for v in x])
print(df_print.T.style.to_latex())

Output:

\begin{tabular}{ll}
{id} & {id1} \\
c1 & 0.00 \\
c2 & 1000 \\
\end{tabular}
  • Related