在iPython Notebook中将DataFrame显示为表格


244

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

df

我得到一张漂亮的桌子,上面有细胞。但是,如果我这样做:

df1
df2 

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

print df1
print df2

它以另一种格式打印表格,该表格会溢出列并使输出很高。

有没有一种方法可以强制它为两个数据集打印出漂亮的表格?


15
display(df)(带有from IPython.display import display),或print df.to_html()
joris

3
@joris,您的评论似乎可以回答这个问题,所以您可以将其发布为答案,以使问题不会一直没有得到回答吗?
Cristian Ciupitu 2015年

Answers:


382

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

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。

您也可以从导入IPython.core.display效果相同


3
是否可以要求python自动打开浏览器并显示HTML(df2.to_html())
Cina

@Cina您应该能够编写HTML到一个文件中,然后调用该文件你喜欢的浏览器,但怎么做取决于你的系统,浏览器等,在很多
nealmcb

2
HTML(df2.to_html())不执行任何操作。您应该执行display(HTML(df2.to_html()))来呈现数据框。我试图编辑您的答案,但是以某种方式被拒绝。
alyaxey

8
在版本5.6.0上,您不需要import display
joelb '18

如何处理串联字符串?例如,从文本列获取所有文本。
Peter.k,

51
from IPython.display import display
display(df)  # OR
print df.to_html()

5
如@emunsing所述,.to_html()不起作用,它提供了未呈现的html表。
mayank 2015年

44

答案基于此博客文章的第二个技巧:28 Jupyter Notebook技巧,窍门和快捷方式

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

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

这告诉Jupyter在自己的行上打印任何变量或语句的结果。这样您就可以执行一个仅包含

df1
df2

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


3
该解决方案效果很好,可以解决最初提出的问题。谢谢!
Zertrin

16

我更喜欢不要搞乱HTML,并尽可能使用本机基础结构。您可以将Output小部件与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

输出:

在此处输入图片说明


5

看来您只可以在显示之间使用逗号显示两个df。我在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")


1

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

   显示(Name_of_the_DataFrame)

例如:

  显示(df)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.