Показуйте 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, ваш коментар, здається, відповідає на питання, тож ви можете, можливо, опублікувати його як відповідь, щоб питання не залишилося без відповіді?
Крістіан Цюпіту

Відповіді:


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
Чи можна попросити python автоматично відкривати браузер і показувати HTML(df2.to_html())?
Кіна

@Cina Ви повинні мати змогу записати HTML у файл, а потім зателефонувати у свій улюблений веб-переглядач у цей файл, але як це зробити, багато що залежить від системи, в якій ви працюєте, браузера тощо
nealmcb

2
HTML (df2.to_html ()) нічого не робить. Ви повинні відобразити (HTML (df2.to_html ())), щоб відобразити кадр даних. Я спробував відредагувати вашу відповідь, але якось її відхилили.
Аляксей

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

Ця відповідь ґрунтується на другій підказці з цього допису в блозі: 28 порад, підказки та ярлики для ноутбука Юпітера

Ви можете додати наступний код у верхній частині вашого ноутбука

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

Це повідомляє Jupyter друкувати результати для будь-якої змінної чи заяви у власному рядку. Тоді ви можете виконати осередок виключно, що містить

df1
df2

і він "роздрукує прекрасні таблиці для обох наборів даних".


3
Це рішення прекрасно працює і вирішує задану оригінальну проблему. Дякую!
Цертрін

16

Я вважаю за краще не возитися з HTML і використовувати якомога більше рідної інфраструктури. Ви можете використовувати віджет Output за допомогою 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. Цей код із зошита Джейка ВандерПласа.

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, просто введіть:

   дисплей (ім'я_файла_да_файли)

наприклад:

  дисплей (df)

0

Щоб відобразити фрейми даних, що містяться у списку:

display(*dfs)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.