แสดง DataFrame เป็นตารางใน iPython Notebook


245

ฉันใช้สมุดบันทึก 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

คำตอบ:


384

คุณจะต้องใช้HTML()หรือdisplay()ฟังก์ชั่นจากโมดูลแสดงผลของ 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()))

โปรดทราบว่าหากคุณเป็นเพียงprint df1.to_html()คุณจะได้รับ HTML ดิบและไม่ได้แสดงผล

คุณยังสามารถนำเข้าจากที่IPython.core.displayมีผลกระทบเดียวกัน


3
เป็นไปได้ไหมที่ขอให้ไพ ธ อนเปิดเบราว์เซอร์และแสดงอัตโนมัติHTML(df2.to_html())?
Cina

@Cina คุณควรจะสามารถเขียน HTML เป็นไฟล์แล้วเรียกเบราว์เซอร์ที่คุณชื่นชอบในไฟล์นั้น แต่วิธีการทำเช่นนั้นขึ้นอยู่กับระบบที่คุณใช้เบราว์เซอร์ ฯลฯ
nealmcb

2
HTML (df2.to_html ()) ไม่ทำอะไรเลย คุณควรแสดงผล (HTML (df2.to_html ())) เพื่อแสดงดาต้าเฟรม ฉันพยายามที่จะแก้ไขคำตอบของคุณ แต่อย่างใดมันก็ถูกปฏิเสธ
alyaxey

8
ในรุ่น 5.6.0 คุณไม่จำเป็นต้องimport display
joelb

วิธีจัดการกับสตริงที่ต่อกัน? ตัวอย่างเช่นการรับข้อความทั้งหมดจากคอลัมน์ข้อความ
Peter.k

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

5
ตามที่ระบุโดย @emunsing, .to_html () ไม่ทำงานมันให้ตาราง html ที่ไม่แสดงผล
mayank

44

คำตอบนี้ขึ้นอยู่กับเคล็ดลับที่ 2 จากโพสต์บล็อกนี้: 28 เคล็ดลับเทคนิคและทางลัดของสมุดบันทึก Jupyter

คุณสามารถเพิ่มรหัสต่อไปนี้ที่ด้านบนของสมุดบันทึกของคุณ

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

สิ่งนี้บอกให้ Jupyter พิมพ์ผลลัพธ์สำหรับตัวแปรหรือข้อความสั่งใด ๆ ในบรรทัดของตัวเอง ดังนั้นคุณสามารถเรียกใช้เซลล์ที่มีเพียงอย่างเดียวได้

df1
df2

และมันจะ "พิมพ์ตารางที่สวยงามสำหรับชุดข้อมูลทั้งสอง"


3
วิธีนี้ใช้งานได้อย่างสวยงามและแก้ปัญหาเดิมที่ถาม ขอบคุณ!
Zertrin

16

ฉันไม่ชอบยุ่งกับ 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

ผลลัพธ์นี้:

ป้อนคำอธิบายรูปภาพที่นี่


5

ดูเหมือนว่าคุณสามารถแสดงทั้งสอง 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")


1

เพื่อแสดง DataFrame ใน Jupyter Notebook เพียงแค่พิมพ์:

   จอแสดงผล (Name_of_the_DataFrame)

ตัวอย่างเช่น:

  จอแสดงผล (DF)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.