Показать таблицу данных, как таблицы в тетради оболочкой IPython


Я использую культуры Когда я делаю это:

df

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

df1
df2 

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

print df1
print df2

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

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

4 132

4 ответа:

вам понадобится 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 С тем же эффектом

публикация комментария @joris в качестве ответа:

display (df) (with from IPython.дисплей импорт экран), или печатать ДФ.to_html()


или в код :

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

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

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

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

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

df1
df2

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

Кажется, вы можете просто отобразить оба dfs, используя запятую между ними на дисплее. Я заметил это на некоторых ноутбуках на github. Этот код от ноутбука Джейк 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")