You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas的to_latex输出中保留索引方括号并正常编译

问题:DataFrame索引含方括号时,正确导出到LaTeX并保留显示效果

我需要将带方括号索引的DataFrame导出到LaTeX文档,希望最终显示[1] Row 1这类格式,但当前导出的LaTeX代码会导致编译报错,手动添加大括号又会显示多余符号。

最小可复现示例

data = {
  "calories": [420, 380, 390],
  "duration": [50, 40, 45]
}

df = pd.DataFrame(data=data, index=['[1] Row 1', '[2] Row 2','[3] Row 3'])

print(df.to_latex(index=True))

当前导出的LaTeX代码

\begin{tabular}{lrr}
\toprule
{} &  calories &  duration \\
\midrule
[1] Row 1 &       420 &        50 \\
[2] Row 2 &       380 &        40 \\
[3] Row 3 &       390 &        45 \\
\bottomrule
\end{tabular}

核心问题

  • 直接导出的[1]会被LaTeX当作命令的一部分,引发编译错误
  • 手动给索引加{[1]},导出后会被自动转义为\{[1]\},最终显示{[1]},不符合需求

解决方案

方法1:关闭自动转义+手动处理索引

设置escape=False关闭LaTeX特殊字符的自动转义,同时给索引中的方括号包裹大括号:

# 修改索引,给方括号添加大括号包裹
df.index = df.index.str.replace(r'\[(.*?)\]', r'{\[\1\]}', regex=True)
# 导出时关闭自动转义
print(df.to_latex(index=True, escape=False))

导出后的正确LaTeX代码:

\begin{tabular}{lrr}
\toprule
{} &  calories &  duration \\
\midrule
{[1]} Row 1 &       420 &        50 \\
{[2]} Row 2 &       380 &        40 \\
{[3]} Row 3 &       390 &        45 \\
\bottomrule
\end{tabular}

此方法生成的代码可正常编译,最终显示[1] Row 1。

方法2:自定义索引格式化函数

使用formatters参数指定索引的格式化逻辑,无需修改原DataFrame:

def format_index(s):
    # 给方括号前后添加大括号
    return s.replace('[', '{[').replace(']', ']}')

# 导出时应用格式化函数到索引
print(df.to_latex(index=True, formatters={df.index.name: format_index}))

该方法在导出过程中动态处理索引格式,同样能生成符合要求的LaTeX代码。


内容的提问来源于stack exchange,提问作者User981636

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:17:18