在iPython Notebook中将DataFrame显示为表

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

df 

我得到一个美丽的细胞表。 但是,如果我这样做:

 df1 df2 

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

 print df1 print df2 

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

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

您需要使用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:" HTML(df2.to_html()) 

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

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

发布@joris的评论作为答案:

显示(df)(从IPython.display导入显示)或打印df.to_html()


或者在代码中:

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

这个答案是基于从这篇博客的第二个技巧: 28 Jupyter笔记本的技巧,窍门和捷径

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

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

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

 df1 df2 

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

看来你可以在显示中使用逗号来显示这两个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")