Pandas: Configuração n. de linhas máximas

138

Tenho um problema ao visualizar o seguinte DataFrame:

n = 100
foo = DataFrame(index=range(n))
foo['floats'] = np.random.randn(n)
foo

O problema é que ele não imprime todas as linhas por padrão no bloco de notas ipython, mas eu tenho que cortar para visualizar as linhas resultantes. Mesmo a seguinte opção não altera a saída:

pd.set_option('display.max_rows', 500)

Alguém sabe como exibir toda a matriz?

Andy
fonte
Quando executo seu código em um bloco de notas padrão (ou seja, sem perfil de configuração especial), recebo uma tabela bem impressa que pode ser rolada com todos os valores. FYI, meus pandas .__ version__ = 0.9.1 (não sei se isso importa)
Bubble Guppies
Eu quis dizer shell regular, não ipython
Ryan Saxe
Eu tenho um sentimento que este pode ser um bug em 0,11 + ...
Andy Hayden
Olá Andy. Isso já foi confirmado por Wes? Onde posso arquivar esse bug? Existe uma solução alternativa?
21713 Andy
Acabei de arquivar aqui , eu sei que houve algumas alterações de última hora em 0,11 no repr do DataFrame, então eu as localizei no relatório de erro. Você será informado sobre a solução alternativa.
Andy Hayden

Respostas:

233

Conjunto display.max_rows:

pd.set_option('display.max_rows', 500)

Para versões mais antigas de pandas (<= 0.11.0), você precisa alterar ambos display.heighte display.max_rows.

pd.set_option('display.height', 500)
pd.set_option('display.max_rows', 500)

Veja também pd.describe_option('display').

Você pode definir uma opção apenas temporariamente para este momento como este:

from IPython.display import display
with pd.option_context('display.max_rows', 100, 'display.max_columns', 10):
    display(df) #need display to show the dataframe when using with in jupyter
    #some pandas stuff

Você também pode redefinir uma opção de volta ao seu valor padrão como este:

pd.reset_option('display.max_rows')

E redefina todos eles de volta:

pd.reset_option('all')

Wouter Overmeire
fonte
6
+1 para o pd.describe_option ( 'display'), eu não sabia que todos as opções
nom-mon-ir
41
A altura agora está obsoleta, portanto a opção display.max_rows é suficiente.
precisa saber é o seguinte
9
Para quem apenas vê a resposta aceita: use with pd.option_context('display.height', 500, 'display.max_rows', 500):para definir apenas temporariamente.
precisa
Eu devo corrigir ou dar a melhor maneira de conseguir isso. Use None e não limite a 500. #Temporary exibir todas as linhas e colunas com pd.option_context ('display.max_rows', None, 'display.max_columns', None): display (df_facilities) O código acima terá efeito apenas na célula que contém o código, portanto, não é necessário redefinir em outras células.
MGB.py 23/01
35

Pessoalmente, gosto de definir as opções diretamente com uma declaração de atribuição, pois é fácil encontrá-las através do preenchimento de guias, graças ao iPython. Acho difícil lembrar quais são os nomes exatos das opções, portanto esse método funciona para mim.

Por exemplo, tudo o que tenho que lembrar é que começa com pd.options

pd.options.<TAB>

insira a descrição da imagem aqui

A maioria das opções está disponível em display

pd.options.display.<TAB>

insira a descrição da imagem aqui

A partir daqui, eu normalmente mostro qual é o valor atual:

pd.options.display.max_rows
60

Em seguida, defino o que quero que seja:

pd.options.display.max_rows = 100

Além disso, você deve estar ciente do gerenciador de contexto para opções, que define temporariamente as opções dentro de um bloco de código. Passe o nome da opção como uma sequência seguida pelo valor que você deseja que seja. Você pode passar qualquer número de opções na mesma linha:

with pd.option_context('display.max_rows', 100, 'display.max_columns', 10):
    some pandas stuff

Você também pode redefinir uma opção de volta ao seu valor padrão como este:

pd.reset_option('display.max_rows')

E redefina todos eles de volta:

pd.reset_option('all')

Ainda é perfeitamente bom definir opções via pd.set_option. Eu apenas acho que usar os atributos diretamente é mais fácil e há menos necessidade de get_optione set_option.

Ted Petrou
fonte
4
with pd.option_contexté o método mais limpo entre essas respostas; menos efeitos colaterais.
ijoseph
10

Já foi apontado neste comentário e nesta resposta , mas tentarei dar uma resposta mais direta à pergunta:

from IPython.display import display
import numpy as np
import pandas as pd

n = 100
foo = pd.DataFrame(index=range(n))
foo['floats'] = np.random.randn(n)

with pd.option_context("display.max_rows", foo.shape[0]):
    display(foo)

O pandas.option_context está disponível desde o pandas 0.13.1 ( notas de versão do pandas 0.13.1 ). De acordo com isso ,

[it] permite que você execute um código de bloqueio com um conjunto de opções que retornam às configurações anteriores quando você sai do bloco com.

Guilherme Beltramini
fonte
9

Como o @hanleyhansen observou em um comentário, a partir da versão 0.18.1, a display.heightopção está obsoleta e diz "use display.max_rowsvez". Então você só precisa configurá-lo assim:

pd.set_option('display.max_rows', 500)

Veja as notas de versão - documentação do pandas 0.18.1 :

A exibição display.height, display.width agora é apenas uma opção de formatação que não controla o acionamento do resumo, semelhante a <0.11.0.

nealmcb
fonte
7
pd.set_option('display.max_rows', 500)
df

Não funciona no Jupyter!
Em vez disso, use:

pd.set_option('display.max_rows', 500)
df.head(500)
Adrien Renaud
fonte
3

Como nesta resposta a uma pergunta semelhante , não há necessidade de hackear configurações. É muito mais simples escrever:

print(foo.to_string())
Ninjakannon
fonte
1
Você não deve convertê-lo em string. Não foi o que Andy pediu.
simtim 22/02
1
@simtim Andy perguntou como "exibir toda a matriz". Isso fará isso e é muito mais simples que a resposta aceita.
22617 Ninjakannon