【问题标题】:Wrap column headers in a latex table exported by pandas.df.to_latex()在 pandas.df.to_latex() 导出的乳胶表中包装列标题
【发布时间】:2019-06-03 20:26:23
【问题描述】:

问题: Pandas.DataFrame.to_latex() 输出的表格不包含长列标题。自 Pandas 0.24 起,line_width= 参数已被删除。

讨论:

我正在使用 df.to_latex() 命令导出许多表,以包含在主文档中。许多表格都有冗长的列标题,主要是因为需要包含括号内的单位。

最终结果是一组荒谬的稀疏表格,这些表格通常不适合页面。

这是一个生成的太稀疏的 Tex 示例:

\begin{tabular}{lrrrrrr}
\toprule
{} & Odometer (km/y) & Fuel (L/y) & Elec (kWh/y) & Economy (L/100km) & GHG (kg CO2e) & GHG (g/km) \\
Type          &                 &            &              &                   &               &            \\
\midrule
Type 1         & 70753.62 & 9721.06 & 0.00 & 13.74 & 21386.33 & 302.26 \\
Type RRR     & 56167.39 & 5285.40 & 1627.60 & 9.41 & 11642.54 & 207.28 \\
Type X        & 195756.35 & 42957.04 & 0.00 & 21.94 & 94505.48 & 482.77 \\
Type Huh        & 187384.66 & 18118.07 & 73.07 & 9.67 & 39860.40 & 212.72 \\
\bottomrule
\end{tabular}

问题:

  • 在我生成的 .tex 中是否有另一种指定换行的方法?
  • 或者,是否有乳胶魔法可以让我的乳胶大师记录 \input 这些表格并指定换行宽度?

【问题讨论】:

    标签: pandas latex


    【解决方案1】:

    问题取决于声明列的方式。指定“r”时,您会说“为较大的单元格做一个足够宽的列并右对齐”。

    您需要做的是使用column_format 参数以p{width} 给出列的宽度,在这种情况下,列项将被格式化为给定宽度的段落,并根据需要换行。

    例如,Pandas 命令:

    df.to_latex(column_format='lp{1.8cm}p{1.8cm}p{1.8cm}p{1.8cm}p{1.8cm}p{1.8cm}')
    

    应该产生一个看起来或多或少像这样的输出 .tex 文件:

    \documentclass{article}
    
    \begin{document}
    \begin{tabular}{lp{1.8cm}p{1.8cm}p{1.8cm}p{1.8cm}p{1.8cm}p{1.8cm}}
    \hline
      {} & Odometer (km/y) & Fuel (L/y) & Elec (kWh/y) & Economy (L/100km) & GHG (kg CO2e) & GHG (g/km) \\
      Type          &                 &            &              &                   &               &            \\
      \hline
      Type 1         & 70753.62 & 9721.06 & 0.00 & 13.74 & 21386.33 & 302.26 \\
      Type RRR     & 56167.39 & 5285.40 & 1627.60 & 9.41 & 11642.54 & 207.28 \\
      Type X        & 195756.35 & 42957.04 & 0.00 & 21.94 & 94505.48 & 482.77 \\
      Type Huh        & 187384.66 & 18118.07 & 73.07 & 9.67 & 39860.40 & 212.72 \\
      \hline
    \end{tabular}
    \bigskip
    
    If you want to control line breaking, just add a $\backslash${newline} where you want.
    
    \begin{tabular}{lp{1.8cm}p{1.8cm}p{1.8cm}p{1.8cm}p{1.8cm}p{1.8cm}}
    \hline
      {} & Odometer\newline (km/y) & Fuel \newline (L/y) & Elec\newline (kWh/y) & Economy\newline (L/100km) & GHG\newline (kg CO2e) & GHG\newline (g/km) \\
      Type          &                 &            &              &                   &               &            \\
      \hline
      Type 1         & 70753.62 & 9721.06 & 0.00 & 13.74 & 21386.33 & 302.26 \\
      Type RRR     & 56167.39 & 5285.40 & 1627.60 & 9.41 & 11642.54 & 207.28 \\
      Type X        & 195756.35 & 42957.04 & 0.00 & 21.94 & 94505.48 & 482.77 \\
      Type Huh        & 187384.66 & 18118.07 & 73.07 & 9.67 & 39860.40 & 212.72 \\
      \hline
    \end{tabular}
    \bigskip
    
    You can also consider adding an extra row for the units.
    
    \begin{tabular}{lp{1.8cm}p{1.8cm}p{1.8cm}p{1.8cm}p{1.8cm}p{1.8cm}}
    \hline
      {} & Odometer & Fuel  & Elec & Economy & GHG & GHG \\
      Type &  (km/y) &  (L/y) & (kWh/y) & (L/100km) &  (kg CO2e) &  (g/km) \\
      \hline
      Type 1         & 70753.62 & 9721.06 & 0.00 & 13.74 & 21386.33 & 302.26 \\
      Type RRR     & 56167.39 & 5285.40 & 1627.60 & 9.41 & 11642.54 & 207.28 \\
      Type X        & 195756.35 & 42957.04 & 0.00 & 21.94 & 94505.48 & 482.77 \\
      Type Huh        & 187384.66 & 18118.07 & 73.07 & 9.67 & 39860.40 & 212.72 \\
      \hline
    \end{tabular}
    
    \end{document}
    

    【讨论】:

    • .tex 由 df.to_latex() 生成。我无法控制列声明。
    • 您可以使用最后一个解决方案(将单位放在单独的行中)与任何列描述符,包括“r”。外观会比你原来的桌子更好,它会解决你的直接问题。但是列的宽度不会与 p{width} 相同。
    • 原来pd.to_latex()上有一个column_format参数。我已对您的解决方案进行了修改,以使其直接回答我的问题。修改通过后我会接受。
    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2014-01-18
    • 2021-02-21
    • 2017-04-29
    • 1970-01-01
    相关资源
    最近更新 更多