web-dev-qa-db-ja.com

IPython NotebookでDataFrameをテーブルとして表示する

私はiPythonノートブックを使っています。私がこれをすると:

df

私は細胞が入った美しいテーブルを手に入れました。しかし、私はこれをすれば:

df1
df2 

最初の美しい表は印刷されません。私がこれを試した場合:

print df1
print df2

それは列をこぼして出力を非常に高くする異なるフォーマットでテーブルをプリントアウトします。

両方のデータセットの美しい表を強制的に印刷する方法はありますか?

176
Chris

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からインポートすることもできます。

290
emunsing
from IPython.display import display
display(df)  # OR
print df.to_html()
40
JacobWuzHere

この回答は、このブログ記事の2番目のヒントに基づいています。 28 Jupyterノートブックのヒント、裏技、およびショートカット

あなたのノートブックの一番上に以下のコードを追加することができます

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

これはJupyterに変数やステートメントの結果をそれ自身の行に表示するように伝えます。それであなたはそれから単独で含んでいるセルを実行することができます

df1
df2

そしてそれは "両方のデータセットのための美しいテーブルを印刷する"でしょう。

31
Jonny Brooks

表示中にカンマを使用して両方の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")

4
Moondra

私は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

これは出力します:

enter image description here

4
Shital Shah