Mostrar DataFrame como tabela no iPython Notebook

244

Estou usando o notebook iPython. Quando eu faço isso:

df

Recebo uma linda mesa com celas. No entanto, se eu fizer isso:

df1
df2 

não imprime a primeira mesa bonita. Se eu tentar isso:

print df1
print df2

Ela imprime a tabela em um formato diferente, que espalha colunas e torna a saída muito alta.

Existe uma maneira de forçá-lo a imprimir as tabelas bonitas para os dois conjuntos de dados?

Chris
fonte
15
display(df)(with from IPython.display import display), ouprint df.to_html()
joris 11/11
3
@joris, seu comentário parece responder à pergunta, então você poderia postá-la como resposta, para que a pergunta não permanecesse sem resposta?
Cristian Ciupitu

Respostas:

381

Você precisará usar as funções HTML()ou display()do módulo de exibição do 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()))

Observe que, se você apenas print df1.to_html()obter o HTML bruto e não renderizado.

Você também pode importar de IPython.core.displaycom o mesmo efeito

emunsing
fonte
3
É possível pedir ao python para abrir automaticamente o navegador e mostrar HTML(df2.to_html())?
Cina
@Cina Você deve escrever o HTML em um arquivo e, em seguida, chamar o navegador favorito nesse arquivo, mas como fazer isso depende muito do sistema em que você está, do navegador etc.
nealmcb
2
HTML (df2.to_html ()) não faz nada. Você deve exibir (HTML (df2.to_html ())) para renderizar o quadro de dados. Tentei editar sua resposta, mas de alguma forma ela foi rejeitada.
precisa saber é o seguinte
8
na versão 5.6.0 você não precisaimport display
joelb
Como lidar com seqüências de caracteres concatenadas? Por exemplo, para obter todo o texto das colunas de texto.
31519 Peter.k
51
from IPython.display import display
display(df)  # OR
print df.to_html()
JacobWuzHere
fonte
5
Conforme declarado por @emunsing, .to_html () não funciona, ele fornece uma tabela html não renderizada.
Mayank
44

Esta resposta é baseada na 2ª dica deste post do blog: 28 dicas, truques e atalhos do Jupyter Notebook

Você pode adicionar o seguinte código à parte superior do seu notebook

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

Isso diz ao Jupyter para imprimir os resultados de qualquer variável ou instrução em sua própria linha. Então você pode executar uma célula contendo apenas

df1
df2

e "imprimirá as lindas tabelas dos dois conjuntos de dados".

Jonny Brooks
fonte
3
Esta solução funciona lindamente e resolve o problema original solicitado. Obrigado!
Zertrin 8/03
16

Prefiro não mexer com HTML e usar o máximo de infraestrutura nativa possível. Você pode usar o widget Saída com Hbox ou 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

Isso gera:

insira a descrição da imagem aqui

Shital Shah
fonte
5

Parece que você pode apenas exibir os dois DFs usando uma vírgula no visor. Notei isso em alguns cadernos no github. Este código é do caderno de 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")

Moondra
fonte
1

Para mostrar o DataFrame no Jupyter Notebook, digite:

   display (Nome_do_DataFrame)

por exemplo:

  display (df)
Hossein SLT
fonte
0

Para exibir quadros de dados contidos em uma lista:

display(*dfs)
BSalita
fonte