Показать DataFrame в виде таблицы в iPython Notebook


245

Я использую ноутбук iPython. Когда я делаю это:

df

Я получаю красивый стол с клетками. Однако, если я сделаю это:

df1
df2 

он не печатает первый красивый стол. Если я попробую это:

print df1
print df2

Он печатает таблицу в другом формате, который разбрасывает столбцы и делает вывод очень высоким.

Есть ли способ заставить его распечатать красивые таблицы для обоих наборов данных?


15
display(df)from IPython.display import display), илиprint df.to_html()
Йорис

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

@Cina У вас должна быть возможность записать HTML-код в файл, а затем вызвать ваш любимый браузер для этого файла, но то, как это сделать, во многом зависит от системы, в которой вы работаете, браузера и т. Д.
nealmcb

2
HTML (df2.to_html ()) ничего не делает. Вы должны сделать display (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

Этот ответ основан на 2-м совете из этого поста в блоге: 28 советов, уловок и ярлыков для ноутбуков Jupyter

Вы можете добавить следующий код в верхней части вашего ноутбука

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

Это говорит Jupyter печатать результаты для любой переменной или оператора в отдельной строке. Таким образом, вы можете выполнить ячейку, содержащую только

df1
df2

и он "распечатает красивые таблицы для обоих наборов данных".


3
Это решение прекрасно работает и решает первоначально поставленную задачу. Спасибо!
Зертрин

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. Этот код взят из записной книжки Джейка ВандерПласа.

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

   дисплей (Name_of_the_DataFrame)

например:

  дисплей (DF)

0

Чтобы отобразить кадры данных, содержащиеся в списке:

display(*dfs)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.