python - 当为 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
谢谢。
解决方案
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
.
推荐阅读
- java - maven mysql连接器和官方mysql连接器jar有什么区别
- apache-kafka - Spring kafka 和 Kafka 集群
- excel - 循环遍历目录(需要帮助添加第二个范围)
- ruby - 只留下第二个数字的正则表达式
- javascript - 具有嵌套函数的节点异步函数
- sql - Redshift 或 ANY SQL:更新具有相似行且时间在 30 秒内的表
- bash - 无法从单行命令回显 bash 变量
- javascript - Object.create({}) 之间的区别 {}
- primefaces - Mojarra 上的 PrimeFaces TreeTable 问题
- sql - 根据 Teradata SQL 中另一列的最大值查找列计数