Pandas 在iPython笔记本中将数据框显示为表

Pandas 在iPython笔记本中将数据框显示为表,pandas,printing,ipython-notebook,jupyter-notebook,display,Pandas,Printing,Ipython Notebook,Jupyter Notebook,Display,我正在使用iPython笔记本电脑。当我这样做时: df 我有一张漂亮的带电池的桌子。但是,如果我这样做: df1 df2 它不会打印第一张漂亮的桌子。如果我尝试这样做: print df1 print df2 它以一种不同的格式打印出表格,从而使列溢出,并使输出非常高 有没有办法强制它为这两个数据集打印出漂亮的表格?您需要使用IPython显示模块中的HTML()或display()函数: from IPython.display import display display(df)

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

df
我有一张漂亮的带电池的桌子。但是,如果我这样做:

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

print df1
print df2
它以一种不同的格式打印出表格,从而使列溢出,并使输出非常高


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

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

from IPython.display import display
display(df)  # OR
print df.to_html()
从IPython.display导入显示,HTML
#假设已经定义了数据帧df1和df2:
打印“数据帧1:
显示器(df1)
打印“数据帧2:
显示(HTML(df2.to_HTML())
请注意,如果您只是
将df1.to_html()
打印出来,您将得到原始的、未渲染的html


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

此答案基于此博客文章的第二条提示:

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

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
这告诉Jupyter在自己的行上打印任何变量或语句的结果。因此,您可以执行一个单独包含

df1
df2

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

似乎您可以在显示中使用逗号显示两个dfs。 我在github上的一些笔记本上注意到了这一点。这段代码来自杰克·范德普拉斯的笔记本

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)
类显示(对象):
“”“显示多个对象的HTML表示形式”“”
模板=“”“

{0}

{1} """ 定义初始化(self,*args): self.args=args 定义报告html(自我): 返回'\n'.join(self.template.format(a,eval(a).\u repr\u html.\u0()) 对于在self.args中的 定义报告(自我): 返回'\n\n'。加入(a+'\n'+repr(eval(a)) 对于在self.args中的

display('df',“df2”)

我不喜欢与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
这将产生:


要显示列表中包含的数据帧,请执行以下操作:

dfs = [df1, df2]
display(*dfs)

要在Jupyter笔记本中显示数据帧,只需键入:

display(Name_of_the_DataFrame) 显示(数据帧的名称) 例如:

display(df) 显示(df)
display(df)
(使用IPython.display导入display中的
)或
print df.to_html()
@joris,您的评论似乎回答了这个问题,所以您是否可以将其作为答案发布,这样问题就不会一直没有答案?如@emunsing所述,.to_html()不起作用,它给出了未渲染的html表。是否可以要求python自动打开浏览器并显示
html(df2.to_html())
?@Cina您应该能够将html写入文件,然后调用您最喜欢的浏览器访问该文件,但如何做在很大程度上取决于您所在的系统、浏览器等。html(df2.to_html())什么都不做。您应该使用display(HTML(df2.to_HTML())来呈现数据帧。我试图编辑您的答案,但不知何故被拒绝。在5.6.0版上,您不需要
导入显示
如何处理串联字符串?例如,从文本列中获取所有文本。此解决方案运行良好,解决了最初提出的问题。谢谢如果您不希望所有内容都显示出来,有没有办法抑制输出?理想情况下,在最后一行末尾放一个分号会阻止打印。@如果在最后一行末尾放一个分号,那么我认为它会抑制所有输出,否则我认为它不会抑制任何输出。如果要抑制变量的输出,则不要将变量放在它自己的行上。您希望抑制某些变量的输出,但仍将其保留在自己的行中的情况是什么?这仅显示列/标题名称,而不是OP要求的名称。相反,他们希望整个数据帧以一种好的格式打印出来。因此,对于较宽的数据帧,显示(df)
或显示(HTML(df2.to_HTML())是正确且可接受的答案。@Kim请重新阅读我的答案。如果您仍然不相信,请用代码验证它。我坚持我的回答。对造成的混乱表示歉意。我确实忽略了你答案中“包含在列表中”的部分。因此,您是对的,您的示例使用的是数据帧列表
dfs
。我建议相应地更新您的代码示例,使其在代码中脱颖而出。特别是因为这是你为讨论带来的额外价值。我非常乐意改变我的投票结果。不完全阅读答案是很常见的。我自己也做过。可能多达40%的评论是误解。