首页 > 解决方案 > 当为 Pandas DataFrames (Python) 调用 display 时,Jupyter notebook 显示不同的输出。它不会在每个单元格中编译 HTML 代码

问题描述

我正在使用 Jupyter Notebook 和 Pandas DataFrame 来查看一些 3D 和 4D 矩阵。我正在使用@Attack68在这个问题中回答的内容。

问题是,当我只使用一个 jupyter 单元来制作 DataFrame,而不调用“显示”函数时,它工作得很好,并且可以完美地运行 HTML 代码。你可以在这里看到一个例子:

import pandas as pd
data = [
    [[1]],
    [[1.0,2.0],[2.0,4.0],[8.0,3.0],[9.0,7.0]],
    [[0.487],[1.532],[1.544],[1.846]],
    [[3.0]],
    [[3.0]],
    [[-1]],
]
    
df = pd.DataFrame([
    [(pd.DataFrame(x)
        .style
        .hide_index()
        .hide_columns()
        .set_table_attributes('class="matrix"')
        .to_html()
     ) for x in data]
], dtype="object")
df.style.set_table_styles([
    {"selector": ".matrix", "props": "position: relative;"},
    {"selector": ".matrix:before, .matrix:after", 
     "props":  'content: ""; position: absolute; top: 0; border: 1px solid #000; width: 6px; height: 100%;'
    },
    {"selector": ".matrix:before", "props": "left: -0px; border-right: -0;"},
    {"selector": ".matrix:after", "props": "right: -0px; border-left: 0;"}
])

这将导致: Intended_Result(我的声誉不足以使用内联图像。抱歉给您带来不便)

然而,问题是,一旦我添加了显示函数来显示表格,它就会停止编译 HTML 代码并显示矩阵本身,并且只返回代码而不是作为 DataFrame 单元格。

import pandas as pd
data = [
    [[1]],
    [[1.0,2.0],[2.0,4.0],[8.0,3.0],[9.0,7.0]],
    [[0.487],[1.532],[1.544],[1.846]],
    [[3.0]],
    [[3.0]],
    [[-1]],
]
    
df = pd.DataFrame([
    [(pd.DataFrame(x)
        .style
        .hide_index()
        .hide_columns()
        .set_table_attributes('class="matrix"')
        .to_html()
     ) for x in data]
], dtype="object")
df.style.set_table_styles([
    {"selector": ".matrix", "props": "position: relative;"},
    {"selector": ".matrix:before, .matrix:after", 
     "props":  'content: ""; position: absolute; top: 0; border: 1px solid #000; width: 6px; height: 100%;'
    },
    {"selector": ".matrix:before", "props": "left: -0px; border-right: -0;"},
    {"selector": ".matrix:after", "props": "right: -0px; border-left: 0;"}
])
display(df)

您可以在此处查看结果: Wrong_Results

谢谢。

标签: pythonhtmlpandasdataframejupyter-notebook

解决方案


df是一个DataFrame类对象。

df.style返回一个Styler类对象。

df.style.some_style_function()还返回一个Styler类对象。

当 Jupyter Notebook 中返回的最后一项是Styler具有_repr_html_()方法的对象时,将调用该方法并将生成的 HTML 显示在单元格中。

当您打电话时,display(df)您实际上是在打电话df._repr_html_(),这显然与df.style.some_styler_function()._repr_html_()它们是不同的 python 对象不同。

此外df._repr_html_()还有一个列宽修剪选项,这意味着单元格...在末尾有阻止 HTML 正确呈现。如果您查看pandas.options.


推荐阅读