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
siunitx
是True
。- 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()
表格样式
在内部,Styler使用其
table_styles
对象来分析column_format
,position
,position_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
参数,该参数实际上控制所有三个命令:toprule
,bottomrule
和midrule
同时。与其设置hrules
至True
,还可以手动设置每个单独的规则定义table_styles
例如,下面我们设置一个常规的toprule
,设置一个hline
为bottomrule
并排除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" ... )
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#f0eRGB(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#f0eRGB(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一起使用:
然而,我们最终想要添加一个纯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}