pandas.io.formats.style.Styler.to_latex # 造型器。to_latex ( buf =无, * , column_format =无,位置=无, position_float =无, hrules =无, clines =无, label =无,标题=无,稀疏索引=无,稀疏列=无, multirow_align =无, multicol_align =无, siunitx = False,环境=无,编码=无, convert_css = False)[来源] # 将 Styler 以 LaTeX 格式写入文件、缓冲区或字符串。 1.3.0 版本中的新增功能。 参数: buf str,路径对象,类文件对象,或 None,默认 None字符串、路径对象(实现os.PathLike[str])或实现字符串write()函数的类文件对象。如果没有,则结果以字符串形式返回。 column_format str,可选LaTeX 列规范放置在以下位置: \begin{表格}{<列格式>} 对于索引和非数字数据列,默认为“l”;对于数字数据列,默认为“r”;如果是,则默认为“S siunitx” True。 位置str,可选表格的 LaTeX 位置参数(例如“h!”),放置在以下位置: \\begin{table}[<position>]。 position_float {“居中”,“raggedleft”,“raggedright”},可选LaTeX float 命令放置在以下位置: \begin{表格}[<位置>] \<浮动位置> environment如果是“longtable”则不能使用。 胡鲁斯布尔设置为True可从 {booktabs} LaTeX 包中添加 \toprule、\midrule 和 \bottomrule。默认为pandas.options.styler.latex.hrules,即False。 在 1.4.0 版本中进行了更改。 clines str,可选用于控制添加 \cline 命令以进行索引标签分隔。可能的值为: None:不添加 cline 命令(默认)。 “all;data”:为扩展表宽度的每个索引值(包括数据条目)添加一条曲线。 “all;index”:如上所述,线条仅延伸索引条目的宽度。 “skip-last;data”:为除最后一级(从不稀疏)之外的每个索引值添加一条曲线,扩展表的宽度。 “skip-last;index”:如上所述,行仅延伸索引条目的宽度。 1.4.0 版本中的新增功能。 标签str,可选LaTeX 标签包含为:\label{<label>}。这与主 .tex 文件中的 \ref{<label>} 一起使用。 标题str,元组,可选如果是字符串,则 LaTeX 表格标题包含为:\caption{<caption>}。如果是元组,即(“完整标题”,“短标题”),则标题包含为:\caption[<caption[1]>]{<caption[0]>}。 稀疏索引布尔值,可选是否稀疏分层索引的显示。设置为 False 将在每行的分层键中显示每个显式级别元素。默认为pandas.options.styler.sparse.index,即True。 稀疏列布尔,可选是否稀疏分层索引的显示。设置为 False 将在每列的分层键中显示每个显式级别元素。默认为pandas.options.styler.sparse.columns,即True。 multirow_align {“c”,“t”,“b”,“naive”},可选如果稀疏分层多索引,是否使用多行包在顶部或底部居中对齐文本。如果没有给出默认值 pandas.options.styler.latex.multirow_align,即“c”。如果给出“naive”则渲染没有多行。 在 1.4.0 版本中进行了更改。 multicol_align {“r”,“c”,“l”,“naive-l”,“naive-r”},可选如果稀疏分层 MultiIndex 列,是否将文本左对齐、居中对齐或右对齐。如果没有给出默认为 pandas.options.styler.latex.multicol_align,即“r”。如果给出了一个简单的选项,则渲染时没有多列。管道装饰器也可以添加到非朴素值中以绘制垂直规则,例如“|r”将在右对齐合并单元格的左侧绘制规则。 在 1.4.0 版本中进行了更改。 siunitx布尔值,默认 False设置为True与 {siunitx} 包兼容的 LaTeX 结构。 环境str,可选如果给出,将替换 中的“table”的环境\\begin{table}。如果指定了“longtable”,则会呈现更合适的模板。如果没有给出默认值 pandas.options.styler.latex.environment,即None。 1.4.0 版本中的新增功能。 编码str,可选字符编码设置。默认为pandas.options.styler.render.encoding,即“utf-8”。 Convert_css bool, 默认 False将简单的单元格样式从 CSS 转换为 LaTeX 格式。任何在转换表中找不到的 CSS 都会被删除。可以通过添加选项–latex强制使用样式 。参见注释。 返回: 字符串或无如果buf为 None,则以字符串形式返回结果。否则返回None。 也可以看看 Styler.format设置单元格文本显示值的格式。 笔记 乳胶包 对于以下功能,我们建议使用以下 LaTeX 包含项: 特征 包容性 稀疏列 无:包含在默认的 {tabular} 环境中 稀疏行 \usepackage{多行} 赫鲁斯 \usepackage{booktabs} 颜色 \usepackage[表]{xcolor} 西尤尼克斯 \usepackage{siunitx} 粗体(与 siunitx 一起) \usepackage{etoolbox} \robustify\bf系列 \sisetup{detect-all = true} (在 {document} 内) 斜体(带有 siunitx) \usepackage{etoolbox} \稳健\itshape \sisetup{detect-all = true} (在 {document} 内) 环境 \usepackage{longtable} 如果 arg 是“longtable” |或任何其他相关环境包 超链接 \usepackage{hyperref} 单元样式 仅当使用适当的 LaTeX 命令构造了随附的样式函数时,才能呈现 LaTeX 样式。所有样式功能都是围绕 CSS 对的概念构建的 (请参阅表格可视化),这应该被 LaTeX 方法取代。每个单元格将使用嵌套的 LaTeX 命令及其附带选项单独设置样式。(<attribute>, <value>)(<command>, <options>) 例如,以下代码将突出显示 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) \<命令><选项>{<显示值>} (<命令>,<选项> --wrap) {\<命令><选项> <显示值>} (<命令>,<选项> --lwrap) {\<命令><选项>} <显示值> (<命令>,<选项> --dwrap) {\<命令><选项>}{<显示值>} 例如,用于 font-weight 的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。除了设置hrulesto之外True,还可以通过手动设置 来设置每个单独的规则定义,table_styles例如下面我们设置常规toprule、设置hlinefor bottomrule并排除midrule: set_table_styles([ {'selector': 'toprule', 'props': ':toprule;'}, {'selector': 'bottomrule', 'props': ':hline;'}, ], overwrite=False) 如果将其他样式commands添加到表格样式中,它们将被检测到,并放置在“\begin{tabular}”命令的正上方。例如,要添加奇数行和偶数行着色,请使用 {colortbl} 包中的 format \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" ... ) 格式化 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 命令 乳胶选项 字体粗细 大胆的 更大胆 BF系列 BF系列 字体样式 斜体 斜 形状 形状 背景颜色 红色的 #fe01ea #f0e RGB(128,255,0) rgba(128,0,0,0.5) RGB(25%,255,50%) 细胞颜色 {红色}–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}–lwrap 颜色 红色的 #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标志将用户定义的仅限 LaTeX 的样式添加到 HTML-CSS Styler,并添加转换器将在 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,包括 MultiIndex 行和列,它们允许更高级的格式化选项: >>> 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”。如果不对format_index方法应用escape=”latex”选项,生成的 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) ... .map(rating_color, subset="Rating")) 所有上述样式在转换后都可以与 HTML(见下文)和 LaTeX 一起使用: 然而,我们最终想要添加一种仅限 LaTeX 的样式(来自 {graphicx} 包),该样式不容易从 CSS 转换,而且 pandas 也不支持它。请注意此处使用的–latex标志以及–rwrap以确保其格式正确并且在转换时不会被忽略。 >>> styler.map_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}