pandas DataFrame 方法告诉 ipython 笔记本显示为 HTML

piR*_*red 0 repr getattr pandas

我创建了一个类,其中主要可交付数据片段作为 pandas DataFrame 存储在属性中。我希望此类实例的默认显示行为与此 DataFrame 的默认显示行为相同。特别是在 iPython Notebook 中。

例如:

from pandas import DataFrame


class TestDFDisplay():
    def __init__(self):
        self.dataframe = DataFrame([[1, 2], [3, 4]])


tdf = TestDFDisplay()
Run Code Online (Sandbox Code Playgroud)

当我:

tdf.dataframe
Run Code Online (Sandbox Code Playgroud)

我得到以下 HTML 版本:

   0  1
0  1  2
1  3  4
Run Code Online (Sandbox Code Playgroud)

当我:

tdf
Run Code Online (Sandbox Code Playgroud)

我得到:

<__main__.TestDFDisplay instance at 0x000000001A836788>
Run Code Online (Sandbox Code Playgroud)

我宁愿得到相同的 HTML:

   0  1
0  1  2
1  3  4
Run Code Online (Sandbox Code Playgroud)

相反,我可以:

from pandas import DataFrame


class TestDFDisplay():
    def __init__(self):
        self.dataframe = DataFrame([[1, 2], [3, 4]])

    def __getattr__(self, item):
        try:
            return object.__getattribute__(self, item)
        except AttributeError:
            try:
                return getattr(self.dataframe, item)
            except:
                raise AttributeError


tdf = TestDFDisplay()
Run Code Online (Sandbox Code Playgroud)

但这是一种非常严厉的方法,它将所有从类实例获取属性的尝试转移到尝试从 DataFrame 获取它。这可行,但我宁愿更精确并执行以下操作:

from pandas import DataFrame


class TestDFDisplay():
    def __init__(self):
        self.dataframe = DataFrame([[1, 2], [3, 4]])

    def __repr__(self):
        return self.dataframe.__repr__()


tdf = TestDFDisplay()
Run Code Online (Sandbox Code Playgroud)

所以当我:

tdf
Run Code Online (Sandbox Code Playgroud)

我得到的是文本版本(与此处显示的相同),而不是我想要的 HTML 版本:

   0  1
0  1  2
1  3  4
Run Code Online (Sandbox Code Playgroud)

没关系。这仅意味着“ repr ”方法不是在 DataFrame 上调用以在 iPython Notebook 中显示 HTML 的正确方法。

我的问题是:我应该在 DataFrame 上重定向的正确方法是什么?

Tom*_*ger 5

您想要的_repr_html_是 IPython/Jupyter在使用丰富的 (HTML) 显示系统时所寻找的内容。

所以在你的班级里

class TestDFDisplay():
    def __init__(self):
        self.dataframe = DataFrame([[1, 2], [3, 4]])

    def _repr_html_(self):
        return self.dataframe._repr_html_()
Run Code Online (Sandbox Code Playgroud)

应该管用。