`pandas.to_latex` -如何使列名加粗

yhuiod9q  于 2023-06-20  发布在  其他
关注(0)|答案(4)|浏览(132)

当我使用pandas.to_latex函数创建latex表时,不幸的是,列名不是粗体。我该怎么做才能让它变得大胆呢?

ztyzrc3y

ztyzrc3y1#

更新

我被告知on GitHub,这是完全可能的平原Pandas,但有一些失踪的文档,这将很快更新。
您可以使用下面的行。

result = df.style.applymap_index(
    lambda v: "font-weight: bold;", axis="columns"
).to_latex(convert_css=True)

旧答案

这里有一个完整的例子,这是改编自官方文件。
有一个关键字可以打印粗体列bold_rows=True。遗憾的是,没有kyword参数为列做同样的事情。但我可以用它来检查我的代码是否为列标题提供了相同的结果。
我使用to_latex()的结果并将其分成三个部分。一个部分是列名称行。在这一行中,我使用正则表达式添加\text{}-字符串。我的代码只有在列名没有空格的情况下才能工作。

import pandas as pd

df = pd.DataFrame(
    dict(name=['Raphael', 'Donatello'],
         mask=['red', 'purple'],
         weapon=['sai', 'bo staff']
        )
)
ans = df.to_latex(bold_rows=True)

split_middle = '\n\midrule\n'
split_top = '\\toprule\n'
top, mid = ans.split(split_middle)
start, columns = top.split(split_top)

columns = re.sub('(\w)+', '\\\\textbf{\g<0>}', columns)

result = split_middle.join([split_top.join([start, columns]), mid])
>>> result
\begin{tabular}{llll}
\toprule
{} &       \textbf{name} &    \textbf{mask} &    \textbf{weapon} \\
\midrule
\textbf{0} &    Raphael &     red &       sai \\
\textbf{1} &  Donatello &  purple &  bo staff \\
\bottomrule
\end{tabular}

在输出中,您可以看到,标题现在是粗体。

ercv8c1e

ercv8c1e2#

这里给出的答案有些不必要。您可以使用pandas.Styler实现。

styler = df.style
styler.applymap_index(lambda v: "font-weight: bold;", axis="index")
styler.applymap_index(lambda v: "font-weight: bold;", axis="columns")
styler.to_latex(convert_css=True)

Styler.to_latex的文档提供了其他方法,如果你想自定义LaTeX粗体函数,例如:例如使用\textbf{}而不是\bfseries
Styler实施最终旨在取代较旧且灵活性较差的DataFrame.LatexFormatter

lymgl2op

lymgl2op3#

基于mosc9575操作df.to_latex输出的直觉,您可以使用一些唯一的分隔符 Package 列标题,以使替换更容易。

import re

s = re.sub('<([^>]*)>', '\\\\textbf{\g<1>}',
           df.rename(columns=lambda x: f'<{x}>').to_latex(index=False))
\begin{tabular}{lll}
\toprule
   \textbf{name} & \textbf{mask} & \textbf{weapon} \\
\midrule
  Raphael &    red &      sai \\
Donatello & purple & bo staff \\
\bottomrule
\end{tabular}
0yycz8jy

0yycz8jy4#

这有点麻烦,但是如果你提前知道列名,你可以将你的表保存到一个文件中,然后直接用python脚本更新文件。在乳胶项目中,您可以使用input{<filepath>}命令导入保存的文件。

import pandas as pd
df = pd.DataFrame(...)
df.to_latex(latex_filepath)

with open(latex_filepath, "r") as fr:
    txt = fr.read()
make_bold_strs = (
    "column-name-1",
    "column-name-2",
    ...
)
for s in make_bold_strs:
    txt = txt.replace(s, "\\textbf{" + s + "}")
with open(latex_filepath, "w") as fw:
    fw.write(txt)

将保存到latex_filepath的表导入到主latex文件中,如下所示:\input{latex_filepath}

相关问题