Показывать DataFrame как таблицу в iPython Notebook
Я использую iPython notebook. Когда я это сделаю:
df
Я получаю красивую таблицу с ячейками. Однако, если я это сделаю:
df1
df2
он не печатает первую красивую таблицу. Если я попробую это:
print df1
print df2
Он печатает таблицу в другом формате, который проливает столбцы и делает вывод очень высоким.
Есть ли способ заставить его распечатать красивые таблицы для обоих наборов данных?
Ответы
Ответ 1
Вам нужно будет использовать функции 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
с тем же эффектом
Ответ 2
from IPython.display import display
display(df) # OR
print df.to_html()
Ответ 3
Этот ответ основан на 2-м совете из этого сообщения в блоге: 28 Советы, трюки и ярлыки ноутбуков Jupyter
Вы можете добавить следующий код к верхней части ноутбука
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
Это сообщает Jupyter распечатать результаты для любой переменной или оператора в своей собственной строке. Таким образом, вы можете выполнить ячейку, содержащую только
df1
df2
и он "распечатает красивые таблицы для обоих наборов данных".
Ответ 4
Кажется, вы можете просто отображать оба 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")
Ответ 5
Я предпочитаю не связываться с 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
Это выводит:
![enter image description here]()