Pandas: réglage no. de lignes max

138

J'ai un problème avec l'affichage des éléments suivants DataFrame:

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

Le problème est qu'il n'imprime pas toutes les lignes par défaut dans le cahier ipython, mais je dois découper pour afficher les lignes résultantes. Même l'option suivante ne modifie pas la sortie:

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

Quelqu'un sait-il comment afficher l'ensemble du tableau?

Andy
la source
Lorsque j'exécute votre code dans un cahier par défaut (c'est-à-dire pas de profil de configuration spécial), j'obtiens un joli tableau imprimé qui peut faire défiler toutes les valeurs. FYI, my pandas .__ version__ = 0.9.1 (je ne sais pas si cela compte)
BubbleGuppies
Je voulais dire shell normal, pas ipython
Ryan Saxe
J'ai le sentiment que cela pourrait être un bug dans 0.11 + ...
Andy Hayden
Salut Andy. Cela a-t-il déjà été confirmé par Wes? Où puis-je signaler ce bogue? Y at-il un travail autour?
Andy
Je viens de le déposer ici , je sais qu'il y a eu des changements de dernière minute dans la version 0.11 du DataFrame repr, donc je les ai copiés dans le rapport de bogue. Vous fera savoir une solution de contournement.
Andy Hayden

Réponses:

233

Ensemble display.max_rows:

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

Pour les anciennes versions de pandas (<= 0.11.0), vous devez modifier à la fois display.heightet display.max_rows.

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

Voir aussi pd.describe_option('display').

Vous ne pouvez définir une option que temporairement pour cette seule fois comme ceci:

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

Vous pouvez également réinitialiser une option à sa valeur par défaut comme ceci:

pd.reset_option('display.max_rows')

Et réinitialisez-les tous:

pd.reset_option('all')

Wouter Overmeire
la source
6
+1 pour la pd.describe_option ('display'), je ne connaissais pas toutes les options
nom-mon-ir
41
La hauteur est désormais obsolète, donc l'option display.max_rows est suffisante.
hanleyhansen
9
Pour tous ceux qui ne regardent que la réponse acceptée: utilisez with pd.option_context('display.height', 500, 'display.max_rows', 500):pour ne les définir que temporairement.
BallpointBen
Je devrais corriger ou donner le meilleur moyen d'y parvenir. Utilisez None et ne vous limitez pas à 500. #Affichage temporaire de toutes les lignes et colonnes avec pd.option_context ('display.max_rows', None, 'display.max_columns', None): display (df_facilities) Le code ci-dessus ne prendra effet que dans la cellule contenant le code donc pas besoin de réinitialiser dans d'autres cellules.
MGB.py
35

Personnellement, j'aime définir les options directement avec une instruction d'affectation car il est facile à trouver via la complétion par tabulation grâce à iPython. J'ai du mal à me rappeler quels sont les noms exacts des options, donc cette méthode fonctionne pour moi.

Par exemple, tout ce dont je dois me souvenir, c'est que ça commence par pd.options

pd.options.<TAB>

entrez la description de l'image ici

La plupart des options sont disponibles sous display

pd.options.display.<TAB>

entrez la description de l'image ici

À partir de là, je sortie généralement la valeur actuelle comme suit:

pd.options.display.max_rows
60

Je le règle ensuite sur ce que je veux qu'il soit:

pd.options.display.max_rows = 100

En outre, vous devez être conscient du gestionnaire de contexte pour les options, qui définit temporairement les options à l'intérieur d'un bloc de code. Transmettez le nom de l'option sous forme de chaîne suivie de la valeur souhaitée. Vous pouvez transmettre n'importe quel nombre d'options dans la même ligne:

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

Vous pouvez également réinitialiser une option à sa valeur par défaut comme ceci:

pd.reset_option('display.max_rows')

Et réinitialisez-les tous:

pd.reset_option('all')

Il est toujours parfaitement bon de définir les options via pd.set_option. Je trouve simplement que l'utilisation directe des attributs est plus facile et qu'il y a moins besoin de get_optionet set_option.

Ted Petrou
la source
4
with pd.option_contextest la méthode la plus propre parmi ces réponses; moindres effets secondaires.
ijoseph
10

C'était déjà indiqué dans ce commentaire et dans cette réponse , mais je vais essayer de donner une réponse plus directe à la question:

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)

pandas.option_context est disponible depuis pandas 0.13.1 ( notes de publication de pandas 0.13.1 ). Selon cela ,

[il] vous permet d'exécuter un bloc de code avec un ensemble d'options qui reviennent aux paramètres précédents lorsque vous quittez le bloc with.

Guilherme Beltramini
la source
9

Comme @hanleyhansen l'a noté dans un commentaire, à partir de la version 0.18.1, l' display.heightoption est obsolète et dit "utiliser à la display.max_rowsplace". Il vous suffit donc de le configurer comme ceci:

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

Voir les notes de version - documentation pandas 0.18.1 :

Display.height obsolète, display.width est désormais uniquement une option de formatage ne contrôle pas le déclenchement du résumé, similaire à <0.11.0.

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

Ne fonctionne pas sous Jupyter!
Utilisez plutôt:

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

Comme dans cette réponse à une question similaire , il n'est pas nécessaire de pirater les paramètres. C'est beaucoup plus simple d'écrire:

print(foo.to_string())
Ninjakannon
la source
1
Vous ne devriez pas le convertir en chaîne. Ce n'est pas ce qu'Andy a demandé.
simtim du
1
@simtim Andy a demandé comment "afficher tout le tableau". Cela fera cela et est beaucoup plus simple que la réponse acceptée.
Ninjakannon