Hiển thị DataFrame dưới dạng bảng trong iPython Notebook


244

Tôi đang sử dụng máy tính xách tay iPython. Khi tôi làm điều này:

df

Tôi nhận được một bảng đẹp với các tế bào. Tuy nhiên, nếu tôi làm điều này:

df1
df2 

Nó không in bảng đẹp đầu tiên. Nếu tôi thử điều này:

print df1
print df2

Nó in ra bảng theo một định dạng khác làm đổ các cột lên và làm cho đầu ra rất cao.

Có cách nào để buộc nó in ra các bảng đẹp cho cả hai tập dữ liệu không?


15
display(df)(với from IPython.display import display), hoặcprint df.to_html()
joris

3
@joris, bình luận của bạn dường như trả lời câu hỏi, vì vậy bạn có thể đăng nó dưới dạng câu trả lời, để câu hỏi không được trả lời?
Cristian Ciupitu

Câu trả lời:


381

Bạn sẽ cần sử dụng HTML()hoặc các display()chức năng từ mô-đun hiển thị của 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()))

Lưu ý rằng nếu bạn chỉ print df1.to_html()nhận được HTML thô, chưa được cập nhật.

Bạn cũng có thể nhập từ IPython.core.displayvới hiệu ứng tương tự


3
Có thể yêu cầu python tự động mở trình duyệt và hiển thị HTML(df2.to_html())?
Cina

@Cina Bạn sẽ có thể viết HTML vào một tệp và sau đó gọi trình duyệt yêu thích của bạn trên tệp đó, nhưng cách thực hiện phụ thuộc rất nhiều vào hệ thống bạn đang truy cập, trình duyệt, v.v.
nealmcb

2
HTML (df2.to_html ()) không làm gì cả. Bạn nên hiển thị (HTML (df2.to_html ())) để hiển thị khung dữ liệu. Tôi đã cố gắng chỉnh sửa câu trả lời của bạn nhưng bằng cách nào đó nó đã bị từ chối.
alyaxey

8
trên phiên bản 5.6.0 bạn không cầnimport display
tham gia

Làm thế nào để đối phó với các chuỗi nối? Ví dụ để lấy tất cả văn bản từ các cột văn bản.
Peter.k

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

5
Như đã nêu bởi @emuning, .to_html () không hoạt động, nó cung cấp bảng html chưa được cập nhật.
mayank

44

Câu trả lời này dựa trên mẹo thứ 2 từ bài đăng trên blog này: 28 mẹo, thủ thuật và phím tắt của Jupyter Notebook

Bạn có thể thêm mã sau vào đầu sổ ghi chép của bạn

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

Điều này bảo Jupyter in kết quả cho bất kỳ biến hoặc câu lệnh nào trên dòng riêng của nó. Vì vậy, sau đó bạn có thể thực thi một ô chỉ chứa

df1
df2

và nó sẽ "in ra các bảng đẹp cho cả hai tập dữ liệu".


3
Giải pháp này hoạt động rất đẹp và giải quyết vấn đề ban đầu được hỏi. Cảm ơn!
Zertrin

16

Tôi không thích lộn xộn với HTML và sử dụng càng nhiều cơ sở hạ tầng bản địa càng tốt. Bạn có thể sử dụng tiện ích đầu ra với Hbox hoặc 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

Kết quả này:

nhập mô tả hình ảnh ở đây


5

Có vẻ như bạn chỉ có thể hiển thị cả hai dfs bằng dấu phẩy ở giữa trong màn hình. Tôi nhận thấy điều này trên một số máy tính xách tay trên github. Mã này là từ máy tính xách tay của 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

Để hiển thị DataFrame trong Jupyter Notebook, chỉ cần gõ:

   hiển thị (Name_of_the_DataFrame)

ví dụ:

  hiển thị (df)

0

Để hiển thị các tệp dữ liệu có trong một danh sách:

display(*dfs)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.