Tampilkan DataFrame sebagai tabel di iPython Notebook

245

Saya menggunakan notebook iPython. Ketika saya melakukan ini:

df

Saya mendapatkan meja yang indah dengan sel. Namun, jika saya melakukan ini:

df1
df2 

itu tidak mencetak tabel cantik pertama. Jika saya coba ini:

print df1
print df2

Ini mencetak tabel dalam format berbeda yang menumpahkan kolom dan membuat output sangat tinggi.

Apakah ada cara untuk memaksanya mencetak tabel yang indah untuk kedua set data?

Chris
sumber
15
display(df)(with from IPython.display import display), atauprint df.to_html()
joris
3
@ joris, komentar Anda sepertinya menjawab pertanyaan, jadi bisakah Anda mempostingnya sebagai jawaban, sehingga pertanyaan itu tidak tetap tidak terjawab?
Cristian Ciupitu

Jawaban:

384

Anda harus menggunakan fungsi HTML()atau display()dari modul tampilan IPython:

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()))

Perhatikan bahwa jika Anda baru saja print df1.to_html()mendapatkan HTML mentah yang tidak dirender.

Anda juga dapat mengimpor dari IPython.core.displaydengan efek yang sama

emunsing
sumber
3
Apakah mungkin untuk meminta python untuk membuka dan menampilkan browser secara otomatis HTML(df2.to_html())?
Cina
@Cina Anda harus dapat menulis HTML ke file, dan kemudian memanggil browser favorit Anda pada file itu, tetapi cara melakukannya sangat tergantung pada sistem yang Anda gunakan, browser, dll.
nealmcb
2
HTML (df2.to_html ()) tidak melakukan apa pun. Anda harus menampilkan (HTML (df2.to_html ()))) untuk merender bingkai data. Saya mencoba mengedit jawaban Anda tetapi entah bagaimana ditolak.
alyaxey
8
pada versi 5.6.0 Anda tidak perluimport display
joelb
Bagaimana cara menangani string yang digabungkan? Misalnya untuk mendapatkan semua teks dari kolom teks.
Peter.k
51
from IPython.display import display
display(df)  # OR
print df.to_html()
JacobWuzHere
sumber
5
Seperti yang dinyatakan oleh @emunsing, .to_html () tidak berfungsi, ia memberikan tabel html yang tidak dirender.
mayank
44

Jawaban ini didasarkan pada tip ke-2 dari posting blog ini: 28 Tips, trik, dan cara pintas Notebook Jupyter

Anda dapat menambahkan kode berikut ke bagian atas buku catatan Anda

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

Ini memberitahu Jupyter untuk mencetak hasil untuk variabel atau pernyataan apa pun pada barisnya sendiri. Jadi Anda bisa menjalankan sel yang hanya berisi

df1
df2

dan itu akan "mencetak tabel yang indah untuk kedua set data".

Jonny Brooks
sumber
3
Solusi ini berfungsi dengan baik dan menyelesaikan masalah awal yang diajukan. Terima kasih!
Zertrin
16

Saya lebih suka tidak main-main dengan HTML dan menggunakan sebanyak mungkin infrastruktur asli. Anda dapat menggunakan widget Output dengan Hbox atau 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

Output ini:

masukkan deskripsi gambar di sini

Shital Shah
sumber
5

Tampaknya Anda hanya dapat menampilkan kedua dfs menggunakan koma di antara layar. Saya perhatikan ini pada beberapa notebook di github. Kode ini dari notebook 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")

Moondra
sumber
1

Untuk menampilkan DataFrame di Jupyter Notebook, cukup ketik:

   display (Name_of_the_DataFrame)

sebagai contoh:

  tampilan (df)
Hossein SLT
sumber
0

Untuk menampilkan kerangka data yang ada dalam daftar:

display(*dfs)
BSalita
sumber