pandas.io.formats.style.Styler.to_latex#

Styler.to_latex(buf=None, *, column_format=None, position=None, position_float=None, hrules=None, clines=None, label=None, caption=None, sparse_index=None, sparse_columns=None, multirow_align=None, multicol_align=None, siunitx=False, environment=None, encoding=None, convert_css=False)[源代码]#

将Styler写入LaTeX格式的文件、缓冲区或字符串。

1.3.0 新版功能.

参数
buf字符串、路径对象、类似文件的对象或无,默认为无

字符串、路径对象(实现 os.PathLike[str] ),或实现字符串的类似文件的对象 write() 功能。如果没有,则以字符串形式返回结果。

column_format字符串,可选

放置位置的 Latex 柱规格:

\begin{tabular}{<column_format>}

对于索引和非数值数据列,默认为‘l’;对于数值数据列,默认为‘r’,如果是,则默认为‘S siunitxTrue

position字符串,可选

LaTeX位置参数(例如‘h!’)对于放置位置的桌子:

\\begin{{table}}[<position>]

position_float{“居中”,“粗左”,“粗右”},选填

LaTeX Float命令放置在以下位置:

\开始{TABLE} [<position>]

\<position_float>

在以下情况下不能使用 environment 是“可长的”。

hrules布尔尔

设置为 True 若要从{booktabs}LaTeX包中添加\topRule、\Midrule和\BottomRule,请执行以下操作。默认为 pandas.options.styler.latex.hrules ,即 False

在 1.4.0 版更改.

clines字符串,可选

用于控制添加用于索引标签分隔的\CLINE命令。可能的值包括:

  • None :不添加任何CLINE命令(默认)。

  • "all;data" :为每个延长表格宽度的索引值添加一个斜面,包括数据条目。

  • "all;index" :如上所述,线条仅延伸索引条目的宽度。

  • "skip-last;data" :为除最后一级(从不稀疏)之外的每个索引值添加一个斜线,扩展了表的宽度。

  • "skip-last;index" :如上所述,线条仅延伸索引条目的宽度。

1.4.0 新版功能.

label字符串,可选

Latex 标签包括:\Label{<Label>}。它与主.tex文件中的\ref{<Label>}一起使用。

caption字符串、元组、可选

如果为字符串,则LaTeX表格标题包含为:\Caption{<Caption>}。如果为tuple,即(“Full Caption”,“Short Caption”),则标题包含为:\Caption [<caption[1] >]{<标题 [0] >}。

sparse_index布尔值,可选

是否稀疏层次索引的显示。设置为FALSE将在每行的分层关键字中显示每个显式级别元素。默认为 pandas.options.styler.sparse.index ,即 True

sparse_columns布尔值,可选

是否稀疏层次索引的显示。设置为False将在每个列的分层键中显示每个显式级别元素。默认为 pandas.options.styler.sparse.columns ,即 True

multirow_align{“c”,“t”,“b”,“naive”},可选

如果稀疏分层多索引使用多行程序包是将文本居中对齐、在顶部对齐还是在底部对齐。如果未指定,则默认为 pandas.options.styler.latex.multirow_align ,即 "c" 。如果给予“幼稚”,则在没有多行的情况下渲染。

在 1.4.0 版更改.

multicol_align{“r”,“c”,“l”,“naive-l”,“naive-r”},可选

如果稀疏分层多索引列,则文本是左对齐、居中对齐还是右对齐。如果未指定,则默认为 pandas.options.styler.latex.multicol_align ,这是“r”。如果提供了一个朴素的选项,则在不使用多色的情况下渲染。还可以将管道装饰符添加到非朴素的值中以绘制垂直规则,例如“|r”将在右对齐的合并单元格的左侧绘制规则。

在 1.4.0 版更改.

siunitx布尔值,默认为False

设置为 True 构造与{siunitx}包兼容的LaTeX。

environment字符串,可选

如果给定,将替换中的‘table’的环境 \\begin{{table}} 。如果指定了‘Longtable’,则会呈现更合适的模板。如果未指定,则默认为 pandas.options.styler.latex.environment ,即 None

1.4.0 新版功能.

encoding字符串,可选

字符编码设置。默认为 pandas.options.styler.render.encoding ,即“utf-8”。

convert_css布尔值,默认为False

将简单的单元格样式从css转换为LaTeX格式。在转换表中找不到的任何CSS都将被删除。可以通过添加选项来强制使用样式 --latex 。请参见备注。

退货
字符串或无

如果 buf 为None,则以字符串形式返回结果。否则将返回 None

参见

Styler.format

设置单元格的文本显示值的格式。

注意事项

** Latex 包装**

对于以下功能,我们建议使用以下 Latex 包含物:

功能

包含

稀疏列

无:包含在默认的{表格格式}环境中

稀疏行

\UsPack{Multirow}

Hruls

\usepackage{booktabs}

颜色

\使用袋子 [表格] {xCOLOR}

Siunitx

\usepackage{siunitx}

粗体(带siunitx)

\UsPack{Toolbox}
\robustify\bf系列
\siSetup{Detect-all=TRUE} (在{{文档}}内)

斜体(带siunitx)

\UsPack{Toolbox}
\确定它的形状
\siSetup{Detect-all=TRUE} (在{{文档}}内)

环境

如果arg是“long table”|或任何其他相关的环境包,则为\usepackage{long table

超链接

\UsPack{Hyperref}

单元格样式

只有使用适当的LaTeX命令构造了相应的样式函数,才能呈现LaTeX样式。所有样式功能都是围绕着CSS的概念构建的 (<attribute>, <value>) 配对(请参见 Table Visualization ),这应该用 Latex 代替 (<command>, <options>) 接近。每个单元格将使用嵌套的LaTeX命令及其附带的选项单独设置样式。

例如,下面的代码将突出显示并加粗HTML-CSS中的一个单元格:

>>> df = pd.DataFrame([[1,2], [3,4]])
>>> s = df.style.highlight_max(axis=None,
...                            props='background-color:red; font-weight:bold;')
>>> s.to_html()  

使用仅LaTeX命令的等价物如下:

>>> s = df.style.highlight_max(axis=None,
...                            props='cellcolor:{red}; bfseries: ;')
>>> s.to_latex()  

在内部,这些结构化的 Latex (<command>, <options>) 对被转换为 display_value 使用默认结构: \<command><options> <display_value> 。在有多个命令的情况下,后者递归嵌套,因此上面突出显示的单元格呈现为 \cellcolor{{red}} \bfseries 4

有时,此格式不适合所应用的命令或正在使用的LaTeX包的组合,因此可以将其他标志添加到 <options> ,以产生所需大括号的不同位置( 默认设置 与之相同 --nowrap ):

元组格式

产出结构

(<命令>、<选项>)

\<命令><选项><显示值>

(<命令>、<选项> --nowrap )

\<命令><选项><显示值>

(<命令>、<选项> --rwrap )

\<command><options>{<display_value>}

(<命令>、<选项> --wrap )

{\<命令><选项><显示值>}

(<命令>、<选项> --lwrap )

{\<命令><选项>}<显示值>

(<命令>、<选项> --dwrap )

{\<command><options>}{<display_value>}

例如, textbf 字体粗细命令应始终与一起使用 --rwrap 所以 ('textbf', '--rwrap') 将用大括号包装的工作单元格呈现为 \textbf{{<display_value>}}

下面是一个更全面的例子:

>>> df = pd.DataFrame([[1, 2.2, "dogs"], [3, 4.4, "cats"], [2, 6.6, "cows"]],
...                   index=["ix1", "ix2", "ix3"],
...                   columns=["Integers", "Floats", "Strings"])
>>> s = df.style.highlight_max(
...     props='cellcolor:[HTML]{FFFF00}; color:{red};'
...           'textit:--rwrap; textbf:--rwrap;'
... )
>>> s.to_latex()  
../../_images/latex_1.png

表格样式

在内部,Styler使用其 table_styles 对象来分析 column_formatpositionposition_float ,以及 label 输入参数。这些参数以以下格式添加到表格样式中:

set_table_styles([
    {"selector": "column_format", "props": f":{column_format};"},
    {"selector": "position", "props": f":{position};"},
    {"selector": "position_float", "props": f":{position_float};"},
    {"selector": "label", "props": f":{{{label.replace(':','§')}}};"}
], overwrite=False)

则会为 hrules 参数,该参数实际上控制所有三个命令: toprulebottomrulemidrule 同时。与其设置 hrulesTrue ,还可以手动设置每个单独的规则定义 table_styles 例如,下面我们设置一个常规的 toprule ,设置一个 hlinebottomrule 并排除 midrule

set_table_styles([
    {'selector': 'toprule', 'props': ':toprule;'},
    {'selector': 'bottomrule', 'props': ':hline;'},
], overwrite=False)

如果是其他 commands 添加到表格样式中时,它们将被检测到,并被放置在“\Begin{Tabular}”命令的正上方。例如,在{Colortbl}包中添加奇数和偶数行颜色,格式为 \rowcolors{{1}}{{pink}}{{red}} ,请使用:

set_table_styles([
    {'selector': 'rowcolors', 'props': ':{1}{pink}{red};'}
], overwrite=False)

使用这些参数的更全面的示例如下:

>>> df.columns = pd.MultiIndex.from_tuples([
...     ("Numeric", "Integers"),
...     ("Numeric", "Floats"),
...     ("Non-Numeric", "Strings")
... ])
>>> df.index = pd.MultiIndex.from_tuples([
...     ("L0", "ix1"), ("L0", "ix2"), ("L1", "ix3")
... ])
>>> s = df.style.highlight_max(
...     props='cellcolor:[HTML]{FFFF00}; color:{red}; itshape:; bfseries:;'
... )
>>> s.to_latex(
...     column_format="rrrrr", position="h", position_float="centering",
...     hrules=True, label="table:5", caption="Styled LaTeX Table",
...     multirow_align="t", multicol_align="r"
... )  
../../_images/latex_2.png

Formatting

格式化值的步骤 Styler.format() 应在调用之前使用 Styler.to_latex ,以及其他方法,如 Styler.hide() 例如:

>>> s.clear()
>>> s.table_styles = []
>>> s.caption = None
>>> s.format({
...    ("Numeric", "Integers"): '\${}',
...    ("Numeric", "Floats"): '{:.3f}',
...    ("Non-Numeric", "Strings"): str.upper
... })  
                Numeric      Non-Numeric
          Integers   Floats    Strings
L0    ix1       $1   2.200      DOGS
      ix2       $3   4.400      CATS
L1    ix3       $2   6.600      COWS
>>> s.to_latex()  
\begin{tabular}{llrrl}
{} & {} & \multicolumn{2}{r}{Numeric} & {Non-Numeric} \\
{} & {} & {Integers} & {Floats} & {Strings} \\
\multirow[c]{2}{*}{L0} & ix1 & \\$1 & 2.200 & DOGS \\
 & ix2 & \$3 & 4.400 & CATS \\
L1 & ix3 & \$2 & 6.600 & COWS \\
\end{tabular}

Css转换

此方法可以使用以下有限的转换将使用HTML-CSS构造的Styler转换为LaTeX。

Css属性

CSS值

LaTeX命令

LaTeX选项

字体粗细

大胆
更粗体
Bf系列
Bf系列

字体样式

斜体
倾斜
它的形状
斜面形状

背景色

红色
#fe01ea
#f0e
RGB(128,255,0)
RGBA(128,0,0,0.5)
RGB(25%、255、50%)

单元格颜色

{red}--LWRAP
[HTML] {FE01EA}--LWRAP
[HTML] {FF00EE}--LWRAP
[rgb] {0.5,1,0}--LWRAP
[rgb] {0.5,0,0}--LWRAP
[rgb] {0.25,1,0.5}--lprint

颜色

红色
#fe01ea
#f0e
RGB(128,255,0)
RGBA(128,0,0,0.5)
RGB(25%、255、50%)

颜色

{红色}
[HTML] {FE01EA}
[HTML] {FF00EE}
[rgb]{0.5,1,0}
[rgb]{0.5,0,0}
[rgb]{0.25,1,0.5}

属性将用户定义的纯LaTeX样式添加到HTML-CSS Styler中 --latex 标志,并添加转换器将在css注释中检测到的LaTeX解析选项。

>>> df = pd.DataFrame([[1]])
>>> df.style.set_properties(
...     **{"font-weight": "bold /* --dwrap */", "Huge": "--latex--rwrap"}
... ).to_latex(convert_css=True)  
\begin{tabular}{lr}
{} & {0} \\
0 & {\bfseries}{\Huge{1}} \\
\end{tabular}

示例

下面,我们给出一个完整的逐步示例,添加一些高级功能,并注意一些常见的陷阱。

首先,我们像往常一样创建DataFrame和Styler,包括多索引行和列,这允许使用更高级的格式选项:

>>> cidx = pd.MultiIndex.from_arrays([
...     ["Equity", "Equity", "Equity", "Equity",
...      "Stats", "Stats", "Stats", "Stats", "Rating"],
...     ["Energy", "Energy", "Consumer", "Consumer", "", "", "", "", ""],
...     ["BP", "Shell", "H&M", "Unilever",
...      "Std Dev", "Variance", "52w High", "52w Low", ""]
... ])
>>> iidx = pd.MultiIndex.from_arrays([
...     ["Equity", "Equity", "Equity", "Equity"],
...     ["Energy", "Energy", "Consumer", "Consumer"],
...     ["BP", "Shell", "H&M", "Unilever"]
... ])
>>> styler = pd.DataFrame([
...     [1, 0.8, 0.66, 0.72, 32.1678, 32.1678**2, 335.12, 240.89, "Buy"],
...     [0.8, 1.0, 0.69, 0.79, 1.876, 1.876**2, 14.12, 19.78, "Hold"],
...     [0.66, 0.69, 1.0, 0.86, 7, 7**2, 210.9, 140.6, "Buy"],
...     [0.72, 0.79, 0.86, 1.0, 213.76, 213.76**2, 2807, 3678, "Sell"],
... ], columns=cidx, index=iidx).style

其次,我们将设置显示的格式,并且由于我们的表非常宽,因此将隐藏索引的重复的0级:

>>> styler.format(subset="Equity", precision=2)
...       .format(subset="Stats", precision=1, thousands=",")
...       .format(subset="Rating", formatter=str.upper)
...       .format_index(escape="latex", axis=1)
...       .format_index(escape="latex", axis=0)
...       .hide(level=0, axis=0)  

请注意,索引和列标题的字符串条目之一是“H&M”。而不应用 escape="latex" 选项添加到 format_index 方法生成的LaTeX将无法呈现,并且返回的错误很难调试。使用适当的转义将“&”转换为“\&”。

第三,我们将对我们的对象应用一些(css-html)样式。我们将使用内置方法并定义我们自己的方法来突出显示股票推荐:

>>> def rating_color(v):
...     if v == "Buy": color = "#33ff85"
...     elif v == "Sell": color = "#ff5933"
...     else: color = "#ffdd33"
...     return f"color: {color}; font-weight: bold;"
>>> styler.background_gradient(cmap="inferno", subset="Equity", vmin=0, vmax=1)
...       .applymap(rating_color, subset="Rating")  

上述所有样式均可在转换后与HTML(见下文)和LaTeX一起使用:

../../_images/latex_stocks_html.png

然而,我们最终想要添加一个纯LaTeX样式(来自{graph icx}包),这不容易从CSS转换,而且Pandas不支持它。请注意 --latex 此处使用的标志以及 --rwrap 以确保其格式正确且在转换时不会被忽略。

>>> styler.applymap_index(
...     lambda v: "rotatebox:{45}--rwrap--latex;", level=2, axis=1
... )  

最后,我们根据需要添加其他选项来呈现LaTeX:

>>> styler.to_latex(
...     caption="Selected stock correlation and simple statistics.",
...     clines="skip-last;data",
...     convert_css=True,
...     position_float="centering",
...     multicol_align="|c|",
...     hrules=True,
... )  
\begin{table}
\centering
\caption{Selected stock correlation and simple statistics.}
\begin{tabular}{llrrrrrrrrl}
\toprule
 &  & \multicolumn{4}{|c|}{Equity} & \multicolumn{4}{|c|}{Stats} & Rating \\
 &  & \multicolumn{2}{|c|}{Energy} & \multicolumn{2}{|c|}{Consumer} &
\multicolumn{4}{|c|}{} &  \\
 &  & \rotatebox{45}{BP} & \rotatebox{45}{Shell} & \rotatebox{45}{H\&M} &
\rotatebox{45}{Unilever} & \rotatebox{45}{Std Dev} & \rotatebox{45}{Variance} &
\rotatebox{45}{52w High} & \rotatebox{45}{52w Low} & \rotatebox{45}{} \\
\midrule
\multirow[c]{2}{*}{Energy} & BP & {\cellcolor[HTML]{FCFFA4}}
\color[HTML]{000000} 1.00 & {\cellcolor[HTML]{FCA50A}} \color[HTML]{000000}
0.80 & {\cellcolor[HTML]{EB6628}} \color[HTML]{F1F1F1} 0.66 &
{\cellcolor[HTML]{F68013}} \color[HTML]{F1F1F1} 0.72 & 32.2 & 1,034.8 & 335.1
& 240.9 & \color[HTML]{33FF85} \bfseries BUY \\
 & Shell & {\cellcolor[HTML]{FCA50A}} \color[HTML]{000000} 0.80 &
{\cellcolor[HTML]{FCFFA4}} \color[HTML]{000000} 1.00 &
{\cellcolor[HTML]{F1731D}} \color[HTML]{F1F1F1} 0.69 &
{\cellcolor[HTML]{FCA108}} \color[HTML]{000000} 0.79 & 1.9 & 3.5 & 14.1 &
19.8 & \color[HTML]{FFDD33} \bfseries HOLD \\
\cline{1-11}
\multirow[c]{2}{*}{Consumer} & H\&M & {\cellcolor[HTML]{EB6628}}
\color[HTML]{F1F1F1} 0.66 & {\cellcolor[HTML]{F1731D}} \color[HTML]{F1F1F1}
0.69 & {\cellcolor[HTML]{FCFFA4}} \color[HTML]{000000} 1.00 &
{\cellcolor[HTML]{FAC42A}} \color[HTML]{000000} 0.86 & 7.0 & 49.0 & 210.9 &
140.6 & \color[HTML]{33FF85} \bfseries BUY \\
 & Unilever & {\cellcolor[HTML]{F68013}} \color[HTML]{F1F1F1} 0.72 &
{\cellcolor[HTML]{FCA108}} \color[HTML]{000000} 0.79 &
{\cellcolor[HTML]{FAC42A}} \color[HTML]{000000} 0.86 &
{\cellcolor[HTML]{FCFFA4}} \color[HTML]{000000} 1.00 & 213.8 & 45,693.3 &
2,807.0 & 3,678.0 & \color[HTML]{FF5933} \bfseries SELL \\
\cline{1-11}
\bottomrule
\end{tabular}
\end{table}
../../_images/latex_stocks.png