Tenho dois dataframes de pandas e gostaria de exibi-los no bloco de notas Jupyter.
Fazendo algo como:
display(df1)
display(df2)
Mostra um abaixo do outro:
Eu gostaria de ter um segundo dataframe à direita do primeiro. Há uma pergunta semelhante , mas parece que uma pessoa está satisfeita em mesclá-los em um dataframe ou mostrar a diferença entre eles.
Isso não vai funcionar para mim. No meu caso, os dataframes podem representar completamente diferentes (elementos não comparáveis) e o tamanho deles pode ser diferente. Portanto, meu principal objetivo é economizar espaço.
pandas
ipython-notebook
jupyter-notebook
Salvador Dalí
fonte
fonte
Respostas:
Você pode substituir o CSS do código de saída. Ele usa
flex-direction: column
por padrão. Emrow
vez disso, tente mudar para . Aqui está um exemplo:Você pode, é claro, personalizar o CSS conforme desejar.
Se você deseja direcionar apenas a saída de uma célula, tente usar o
:nth-child()
seletor. Por exemplo, este código modificará o CSS da saída de apenas a 5ª célula do notebook:fonte
HTML('<style>{}</style>'.format(CSS))
seja a última linha na célula (e não se esqueça de usar o seletor n-ésimo). No entanto, isso pode causar problemas com a formatação, portanto, sua solução é melhor. (+1)HTML('<style>.output {flex-direction: row;}</style>')
para simplificarAcabei escrevendo uma função que pode fazer isso:
Exemplo de uso:
fonte
*args
vez de apenasdf
? É porque você pode ter várias entradas com*args
? 2) Qual parte de sua função faz com que o segundo df e os subseqüentes sejam adicionados à direita do primeiro em vez de abaixo dele? É a'table style="display:inline"'
parte? Obrigado novamenteStyler
s, nãoDataFrame
s. Nesse caso, use emhtml_str+=df.render()
vez dehtml_str+=df.to_html()
.A partir
pandas 0.17.1
da visualização de DataFrames podem ser modificados diretamente com métodos de estilo pandasPara exibir dois DataFrames lado a lado, você deve usar
set_table_attributes
com o argumento"style='display:inline'"
sugerido na resposta ntg . Isso retornará doisStyler
objetos. Para exibir os dataframes alinhados, basta passar sua representação HTML associada por meio dodisplay_html
método do IPython.Com esse método, também é mais fácil adicionar outras opções de estilo. Veja como adicionar uma legenda, conforme solicitado aqui :
fonte
Combinando abordagens de gibbone (para definir estilos e legendas) e stevi (adicionar espaço), fiz minha versão da função, que produz dataframes de pandas como tabelas lado a lado:
Uso:
Resultado:
fonte
Aqui está a solução de Jake Vanderplas que encontrei outro dia:
Crédito: https://github.com/jakevdp/PythonDataScienceHandbook/blob/master/notebooks/03.08-Aggregation-and-Grouping.ipynb
fonte
Minha solução apenas cria uma tabela em HTML sem nenhum hacks CSS e a produz:
fonte
Isso adiciona cabeçalhos à resposta de @ nts:
fonte
mydisplay((df1,df2))
apenas dá emdf.to_html(index=False) df.to_html(index=False)
vez do conteúdo do dataframe. Além disso, há um sinal extra '}' em f'string '.Acabei usando HBOX
fonte
A resposta de Gibbone funcionou para mim! Se você quiser espaço extra entre as tabelas, vá para o código que ele propôs e adicione
"\xa0\xa0\xa0"
-o à seguinte linha de código.fonte
Decidi adicionar algumas funcionalidades extras à elegante resposta de Yasin, em que é possível escolher o número de colunas e linhas; quaisquer dfs extras são então adicionados à parte inferior. Além disso, pode-se escolher em que ordem preencher a grade (basta alterar a palavra-chave de preenchimento para 'cols' ou 'linhas' conforme necessário)
saída de teste
fonte
Extensão da resposta de antony Se você quiser limitar a visualização das tabelas a alguns blocos por linha, use a variável maxTables.
fonte