312

我正在使用 iPython 笔记本。当我这样做时:

df

我得到了一张带有单元格的漂亮表格。但是,如果我这样做:

df1
df2 

它不会打印第一张漂亮的桌子。如果我试试这个:

print df1
print df2

它以不同的格式打印出表格,使列溢出并使输出非常高。

有没有办法强制它为两个数据集打印出漂亮的表格?

4

8 回答 8

487

您需要使用 IPython 显示模块中的HTML()ordisplay()函数:

from IPython.display import display, HTML

# Assuming that dataframes df1 and df2 are already defined:
print "Dataframe 1:"
display(df1)
print "Dataframe 2:"
display(HTML(df2.to_html()))

请注意,如果您只是print df1.to_html()获得原始的、未渲染的 HTML。

您也可以导入 fromIPython.core.display具有相同的效果

于 2015-04-16T04:39:57.280 回答
60
from IPython.display import display
display(df)  # OR
print df.to_html()
于 2015-02-13T19:28:17.763 回答
47

此答案基于此博客文章中的第二个提示:28 Jupyter Notebook 提示、技巧和快捷方式

您可以将以下代码添加到笔记本顶部

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

这告诉 Jupyter 在它自己的行上打印任何变量或语句的结果。所以你可以然后执行一个单元格只包含

df1
df2

它将“打印出两个数据集的漂亮表格”。

于 2017-02-22T13:26:48.073 回答
19

我不喜欢搞乱 HTML 并尽可能多地使用原生基础设施。您可以将输出小部件与 Hbox 或 VBox 一起使用:

import ipywidgets as widgets
from IPython import display
import pandas as pd
import numpy as np

# sample data
df1 = pd.DataFrame(np.random.randn(8, 3))
df2 = pd.DataFrame(np.random.randn(8, 3))

# create output widgets
widget1 = widgets.Output()
widget2 = widgets.Output()

# render in output widgets
with widget1:
    display.display(df1)
with widget2:
    display.display(df2)

# create HBox
hbox = widgets.HBox([widget1, widget2])

# render hbox
hbox

这输出:

在此处输入图像描述

于 2019-03-04T06:11:36.710 回答
9

为了在 Jupyter Notebook 中显示 DataFrame,只需键入:

   显示(名称_of_the_DataFrame)

例如:

  显示(df)
于 2020-03-31T01:09:29.327 回答
5

看来您可以在显示之间使用逗号显示两个 dfs。我在 github 上的一些笔记本上注意到了这一点。此代码来自 Jake VanderPlas 的笔记本。

class display(object):
    """Display HTML representation of multiple objects"""
    template = """<div style="float: left; padding: 10px;">
    <p style='font-family:"Courier New", Courier, monospace'>{0}</p>{1}
    </div>"""
    def __init__(self, *args):
        self.args = args

    def _repr_html_(self):
        return '\n'.join(self.template.format(a, eval(a)._repr_html_())
                     for a in self.args)

    def __repr__(self):
        return '\n\n'.join(a + '\n' + repr(eval(a))
                       for a in self.args)

display('df', "df2")

于 2017-04-14T23:04:13.130 回答
3

您可以使用 markdown 创建表。tabulate如果软件包尚不可用,您将被要求先安装软件包。

from IPython.display import display, Markdown

display(Markdown(df.to_markdown()))
于 2021-09-06T03:52:02.837 回答
2

要显示列表中包含的数据框:

dfs = [df1, df2]
display(*dfs)
于 2020-01-06T11:01:41.877 回答