当为Pandas数据帧(Python)调用display时,Jupyter notebook显示不同的输出。它不会在每个单元格中编译HTML代码

2024-06-02 08:05:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Jupyter笔记本和熊猫数据框查看一些3D和4D矩阵。 我正在使用@Attack68在本question中回复的内容

问题是,当我只使用一个jupyter单元生成数据帧,而不调用“display”函数时,它工作得很好,可以完美地运行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(我的声誉不足以使用内联映像。很抱歉给您带来不便)

但是,问题是,只要我添加display函数来显示表,它就会停止编译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;"}
])
display(df)

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

谢谢


Tags: dataframedfdatastyletablepositionpropsselector
2条回答

dfDataFrame类对象

df.style返回一个Styler类对象

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

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

当您调用display(df)时,实际上是在调用df._repr_html_(),这显然与df.style.some_styler_function()._repr_html_()不同,因为它们是不同的python对象

此外df._repr_html_()还有一个列宽微调选项,这意味着单元格的末尾有...,这会阻止HTML正确呈现。如果您查看pandas.options的文档,可以关闭该功能

首先,我非常感激Attack69的帮助。下面的解决方案完全是在他的帮助下完成的。在我理解了Styler和DataFrame之间的区别后,我只做了一个简单的编辑,@Attack69

解决方案似乎非常简单,我们只需要使用display(df.style)而不是display(df)

同样,我不知道如果没有@Attack68的帮助,我需要多长时间才能想出解决方案。谢谢你帮我解答我的基本问题。我在这方面是新手

相关问题 更多 >