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

如何在Jupyter Notebook中显示Pandas DataFrame中的多空格

解决方法

要让Pandas DataFrame在Notebook中保留并可复制多空格,核心是绕过HTML自动合并空格的默认行为,下面给你几个实用的方案:


方案1:用HTML非断空格替换普通空格(简单快捷)

Pandas的Styler支持渲染HTML内容,我们可以把字符串里的普通空格替换成 (HTML非断空格),这样浏览器就不会合并它们:

import pandas as pd

def keep_spaces(df):
    # 只处理字符串类型的单元格,替换空格为 
    return df.applymap(lambda x: x.replace(' ', ' ') if isinstance(x, str) else x)

# 测试数据
df = pd.DataFrame([["ab  c", "ab   c"], ["ab    c", "ab     c"]])

# 用Styler渲染
display(keep_spaces(df).style)

这个方法的优势是代码量少,显示效果和原生DataFrame接近,复制时大部分Notebook环境会自动把 转回普通空格,能拿到原始多空格的字符串。


方案2:用<pre>标签包裹单元格内容(最可靠的复制体验)

HTML的<pre>标签会强制保留文本的原始格式(包括空格、换行),我们可以手动生成带<pre>的HTML表格来展示DataFrame:

from IPython.display import HTML
import pandas as pd

def df_with_preformatted_spaces(df):
    # 构建HTML表格
    html = '<table style="border-collapse: collapse; border: 1px solid #ccc;">'
    # 添加表头
    html += '<thead><tr>'
    for col in df.columns:
        html += f'<th style="border: 1px solid #ccc; padding: 8px;">{col}</th>'
    html += '</tr></thead><tbody>'
    # 添加每一行数据
    for _, row in df.iterrows():
        html += '<tr>'
        for val in row:
            # 用<pre>包裹内容,保留原始格式
            html += f'<td style="border: 1px solid #ccc; padding: 8px;"><pre>{val}</pre></td>'
        html += '</tr>'
    html += '</tbody></table>'
    return HTML(html)

# 测试
df = pd.DataFrame([["ab  c", "ab   c"], ["ab    c", "ab     c"]])
display(df_with_preformatted_spaces(df))

这个方案的好处是复制时绝对能拿到原始的多空格字符串,<pre>标签会完全保留文本格式,适合对复制准确性要求高的场景。


为什么会出现这个问题?

Notebook中Pandas默认把DataFrame渲染成普通HTML表格,而HTML的标准行为就是将连续的空白字符(空格、制表符等)合并为单个空格,所以即使你的字符串里有多个空格,浏览器显示时也会自动合并,复制时也只能拿到合并后的结果。上面的方案都是通过修改HTML渲染方式来绕过这个默认行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:53:01