pandas.io.formats.style.Styler.to_latex#
- Styler.to_latex(buf=None, *, column_format=None, позиция=None, position_float=None, hrules=None, clines=None, метка=None, заголовок=None, sparse_index=None, sparse_columns=None, multirow_align=None, multicol_align=None, siunitx=False, окружение=None, кодировка=None, convert_css=False)[источник]#
Запись Styler в файл, буфер или строку в формате LaTeX.
Добавлено в версии 1.3.0.
- Параметры:
- bufstr, объект пути, файлоподобный объект или None, по умолчанию None
Строка, объект пути (реализующий
os.PathLike[str]), или файлоподобный объект, реализующий строкуwrite()функция. Если None, результат возвращается в виде строки.- column_formatstr, optional
Спецификация столбца LaTeX, размещенная в местоположении:
\begin{tabular}{
} По умолчанию 'l' для индекса и нечисловых столбцов данных, и, для числовых столбцов данных, по умолчанию 'r', или 'S', если
siunitxявляетсяTrue.- позицияstr, optional
Позиционный аргумент LaTeX (например, 'h!') для таблиц, размещенный в местоположении:
\\begin{table}[.] - position_float{“centering”, “raggedleft”, “raggedright”}, опционально
Команда LaTeX float, размещенная в местоположении:
\begin{table}[
] \
Нельзя использовать, если
environmentявляется 'longtable'.- hrulesbool
Установить в True для добавления \toprule, \midrule и \bottomrule из пакета LaTeX {booktabs}. По умолчанию
pandas.options.styler.latex.hrules, что является False.Изменено в версии 1.4.0.
- clinesstr, optional
Используйте для управления добавлением команд \cline для разделения меток индекса. Возможные значения:
None: команды cline не добавляются (по умолчанию).
"all;data": линия добавляется для каждого значения индекса, расширяя ширину таблицы, включая записи данных.
“all;index”: как выше, с линиями, простирающимися только на ширину записей индекса.
“skip-last;data”: для каждого значения индекса, кроме последнего уровня (который никогда не разреживается), добавляется клин, расширяющий ширину таблицы.
“skip-last;index”: как выше, с линиями, простирающимися только на ширину записей индекса.
Добавлено в версии 1.4.0.
- меткаstr, optional
Метка LaTeX, включенная как: \label{
- заголовокstr, tuple, опционально
Если строка, заголовок таблицы LaTeX включается как: \caption{
}. Если кортеж, т.е. («полный заголовок», «краткий заголовок»), заголовок включается как: \caption[ ]{ }. - sparse_indexbool, необязательно
Спарсифицировать ли отображение иерархического индекса. Установка значения False будет отображать каждый явный элемент уровня в иерархическом ключе для каждой строки. По умолчанию
pandas.options.styler.sparse.index, что является True.- sparse_columnsbool, необязательно
Следует ли разрежать отображение иерархического индекса. Установка значения False будет отображать каждый явный элемент уровня в иерархическом ключе для каждого столбца. По умолчанию
pandas.options.styler.sparse.columns, который True.- multirow_align{“c”, “t”, “b”, “naive”}, опционально
При разрежении иерархических MultiIndex, выравнивать ли текст по центру, сверху или снизу с использованием пакета multirow. Если не указано, по умолчанию
pandas.options.styler.latex.multirow_align, что является “c”. Если указано "naive", отображает без multirow.Изменено в версии 1.4.0.
- multicol_align{“r”, “c”, “l”, “naive-l”, “naive-r”}, опционально
Если разрежать иерархические MultiIndex столбцы, выравнивать ли текст слева, по центру или справа. Если не указано, по умолчанию
pandas.options.styler.latex.multicol_align, что означает "r". Если указана простая опция, отрисовывается без многоколоночности. Декораторы pipe также могут быть добавлены к не-простым значениям для рисования вертикальных линий, например, "|r" нарисует линию с левой стороны правовыровненных объединённых ячеек.Изменено в версии 1.4.0.
- siunitxbool, по умолчанию False
Установить в
Trueдля структурирования LaTeX, совместимого с пакетом {siunitx}.- окружениеstr, optional
Если задано, окружение, которое заменит 'table' в
\\begin{table}. Если указан 'longtable', то отображается более подходящий шаблон. Если не указано, по умолчанию используетсяpandas.options.styler.latex.environment, что является None.Добавлено в версии 1.4.0.
- кодировкаstr, optional
Настройка кодировки символов. По умолчанию
pandas.options.styler.render.encoding, который является “utf-8”.- convert_cssbool, по умолчанию False
Преобразует простые стили ячеек из CSS в формат LaTeX. Любой CSS, не найденный в таблице преобразования, удаляется. Стиль можно принудительно задать, добавив опцию –latex. Смотрите примечания.
- Возвращает:
- str или None
Если buf если None, возвращает результат в виде строки. В противном случае возвращает None.
Смотрите также
Styler.formatФорматирование текстового отображаемого значения ячеек.
Примечания
Пакеты LaTeX
Для следующих функций мы рекомендуем следующие включения LaTeX:
Функция
Включение
разреженные столбцы
none: включено в стандартное окружение {tabular}
разреженные строки
\usepackage{multirow}
hrules
\usepackage{booktabs}
цвета
\usepackage[table]{xcolor}
siunitx
\usepackage{siunitx}
жирный (с siunitx)
\usepackage{etoolbox}\robustify\bfseries\sisetup{detect-all = true} (внутри {document})курсив (с siunitx)
\usepackage{etoolbox}\robustify\itshape\sisetup{detect-all = true} (внутри {document})окружение
\usepackage{longtable}, если arg — "longtable" | или любой другой соответствующий пакет окружения
гиперссылки
\usepackage{hyperref}
Стили ячеек
Стилизация LaTeX может быть отображена только если соответствующие функции стилизации были построены с использованием соответствующих команд LaTeX. Вся функциональность стилизации построена вокруг концепции CSS
(пара (см. Визуализация таблиц), и это следует заменить на LaTeX, ) (подход. Каждая ячейка будет стилизована индивидуально с использованием вложенных команд 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
(пары переводятся в, ) display_valueсо структурой по умолчанию:\. Если есть несколько команд, последняя вкладывается рекурсивно, так что вышеуказанная выделенная ячейка отображается как\cellcolor{red} \bfseries 4.Иногда этот формат не подходит для применяемой команды или комбинации пакетов LaTeX, которые используются, поэтому можно добавить дополнительные флаги к
, внутри кортежа, что приводит к разным позициям требуемых скобок ( по умолчанию будучи таким же, как--nowrap):Формат кортежа
Структура вывода
(<команда>,<опции>)
\<команда><опции> <отображаемое_значение>
(<команда>,<опции>
--nowrap)\<команда><опции> <отображаемое_значение>
(<команда>,<опции>
--rwrap)\
{ } (<команда>,<опции>
--wrap){\<команда><опции> <отображаемое_значение>}
(<команда>,<опции>
--lwrap){\
} (<команда>,<опции>
--dwrap){\
}{ } Например, textbf команда для font-weight всегда должна использоваться с –rwrap так
('textbf', '--rwrap')отобразит работающую ячейку, обёрнутую фигурными скобками, как\textbf{.} Более полный пример выглядит следующим образом:
>>> 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одновременно. Вместо установкиhrulestoTrue, также возможно установить каждое индивидуальное правило, вручную задавtable_styles, например, ниже мы устанавливаем регулярныйtoprule, установитеhlineдляbottomruleи исключитьmidrule:set_table_styles([ {'selector': 'toprule', 'props': ':toprule;'}, {'selector': 'bottomrule', 'props': ':hline;'}, ], overwrite=False)
Если other
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" ... )
Форматирование
Для форматирования значений
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
Этот метод может преобразовать конструкцию Styler, созданную с HTML-CSS, в LaTeX, используя следующие ограниченные преобразования.
CSS-атрибут
Значение CSS
Команда LaTeX
Опции LaTeX
font-weight
жирныйжирныйbfseriesbfseriesfont-style
курсивкосойitshapeslshapebackground-color
красный#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}–lwrapцвет
красный#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флаг и добавление опций парсинга LaTeX, которые конвертер будет обнаруживать внутри CSS-комментария.>>> 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». Без применения 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) ... .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}