811 votes

Python pandas, élargir l'affichage de la sortie ?

Existe-t-il un moyen d'élargir l'affichage de la sortie en mode interactif ou script-exécution ?

Plus précisément, j'utilise la fonction describe() sur un cadre de données Pandas. Lorsque le cadre de données a une largeur de 5 colonnes (étiquettes), j'obtiens les statistiques descriptives que je souhaite. Cependant, si le cadre de données a plus de colonnes, les statistiques sont supprimées et quelque chose comme ceci est retourné :

>Index: 8 entries, count to max  
>Data columns:  
>x1          8  non-null values  
>x2          8  non-null values  
>x3          8  non-null values  
>x4          8  non-null values  
>x5          8  non-null values  
>x6          8  non-null values  
>x7          8  non-null values  

La valeur "8" est donnée qu'il y ait 6 ou 7 colonnes. À quoi se réfère le "8" ?

J'ai déjà essayé de faire glisser la fenêtre IDLE pour l'agrandir, ainsi que d'augmenter les options de largeur de "Configure IDLE", en vain.

Mon but en utilisant Pandas et describe() est d'éviter d'utiliser un second programme comme STATA pour faire de la manipulation et de l'investigation de données de base.

Merci.

Python/IDLE 2.7.3
Pandas 0.8.1
Notepad++ 6.1.4 (UNICODE)
Windows Vista SP2

0 votes

Ici Le guide de l'utilisateur "options et paramètres" de pandas avec des exemples est celui que vous recherchez.

1166voto

Wouter Overmeire Points 6676

Comme mentionné ci-dessus, pandas détecte automatiquement (par défaut) la taille de la zone d'affichage, une vue sommaire sera utilisée lorsqu'un objet repr ne tient pas sur l'affichage. Vous avez mentionné le redimensionnement de la fenêtre IDLE, sans effet. Si vous faites print df.describe().to_string() s'adapte-t-il à la fenêtre IDLE ?

La taille du terminal est déterminée par pandas.util.terminal.get_terminal_size() ce qui renvoie un tuple contenant le (width, height) de l'écran. La sortie correspond-elle à la taille de votre fenêtre IDLE ? Il pourrait y avoir un problème (il y en avait un auparavant lors de l'exécution d'un terminal dans emacs).

Notez qu'il est possible de contourner l'autodétection, pandas.set_printoptions(max_rows=200, max_columns=10) ne passera jamais en vue sommaire si le nombre de lignes et de colonnes ne dépasse pas les limites données.


Mise à jour : Pandas 0.11.0 et suivants

pandas.set_printoptions(...) est dépravée. Au lieu de cela, utilisez pandas.set_option . Comme :

import pandas as pd
pd.set_option('display.height', 1000)
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)

Voici l'aide :

set\_option(pat,value) - Sets the value of the specified option

Available options:
display.\[chop\_threshold, colheader\_justify, column\_space, date\_dayfirst,
         date\_yearfirst, encoding, expand\_frame\_repr, float\_format, height,
         line\_width, max\_columns, max\_colwidth, max\_info\_columns, max\_info\_rows,
         max\_rows, max\_seq\_items, mpl\_style, multi\_sparse, notebook\_repr\_html,
         pprint\_nest\_depth, precision, width\]
mode.\[sim\_interactive, use\_inf\_as\_null\]

Parameters
----------
pat - str/regexp which should match a single option.

Note: partial matches are supported for convenience, but unless you use the
full option name (e.g. x.y.z.option\_name), your code may break in future
versions if new options with similar names are introduced.

value - new value of option.

Returns
-------
None

Raises
------
KeyError if no such option exists

display.chop\_threshold: \[default: None\] \[currently: None\]
: float or None
        if set to a float value, all float values smaller then the given threshold
        will be displayed as exactly 0 by repr and friends.
display.colheader\_justify: \[default: right\] \[currently: right\]
: 'left'/'right'
        Controls the justification of column headers. used by DataFrameFormatter.
display.column\_space: \[default: 12\] \[currently: 12\]No description available.

display.date\_dayfirst: \[default: False\] \[currently: False\]
: boolean
        When True, prints and parses dates with the day first, eg 20/01/2005
display.date\_yearfirst: \[default: False\] \[currently: False\]
: boolean
        When True, prints and parses dates with the year first, eg 2005/01/20
display.encoding: \[default: UTF-8\] \[currently: UTF-8\]
: str/unicode
        Defaults to the detected encoding of the console.
        Specifies the encoding to be used for strings returned by to\_string,
        these are generally strings meant to be displayed on the console.
display.expand\_frame\_repr: \[default: True\] \[currently: True\]
: boolean
        Whether to print out the full DataFrame repr for wide DataFrames
        across multiple lines, \`max\_columns\` is still respected, but the output will
        wrap-around across multiple "pages" if it's width exceeds \`display.width\`.
display.float\_format: \[default: None\] \[currently: None\]
: callable
        The callable should accept a floating point number and return
        a string with the desired format of the number. This is used
        in some places like SeriesFormatter.
        See core.format.EngFormatter for an example.
display.height: \[default: 60\] \[currently: 1000\]
: int
        Deprecated.
        (Deprecated, use \`display.height\` instead.)

display.line\_width: \[default: 80\] \[currently: 1000\]
: int
        Deprecated.
        (Deprecated, use \`display.width\` instead.)

display.max\_columns: \[default: 20\] \[currently: 500\]
: int
        max\_rows and max\_columns are used in \_\_repr\_\_() methods to decide if
        to\_string() or info() is used to render an object to a string.  In case
        python/IPython is running in a terminal this can be set to 0 and pandas
        will correctly auto-detect the width the terminal and swap to a smaller
        format in case all columns would not fit vertically. The IPython notebook,
        IPython qtconsole, or IDLE do not run in a terminal and hence it is not
        possible to do correct auto-detection.
        'None' value means unlimited.
display.max\_colwidth: \[default: 50\] \[currently: 50\]
: int
        The maximum width in characters of a column in the repr of
        a pandas data structure. When the column overflows, a "..."
        placeholder is embedded in the output.
display.max\_info\_columns: \[default: 100\] \[currently: 100\]
: int
        max\_info\_columns is used in DataFrame.info method to decide if
        per column information will be printed.
display.max\_info\_rows: \[default: 1690785\] \[currently: 1690785\]
: int or None
        max\_info\_rows is the maximum number of rows for which a frame will
        perform a null check on its columns when repr'ing To a console.
        The default is 1,000,000 rows. So, if a DataFrame has more
        1,000,000 rows there will be no null check performed on the
        columns and thus the representation will take much less time to
        display in an interactive session. A value of None means always
        perform a null check when repr'ing.
display.max\_rows: \[default: 60\] \[currently: 500\]
: int
        This sets the maximum number of rows pandas should output when printing
        out various output. For example, this value determines whether the repr()
        for a dataframe prints out fully or just a summary repr.
        'None' value means unlimited.
display.max\_seq\_items: \[default: None\] \[currently: None\]
: int or None

        when pretty-printing a long sequence, no more then \`max\_seq\_items\`
        will be printed. If items are ommitted, they will be denoted by the addition
        of "..." to the resulting string.

        If set to None, the number of items to be printed is unlimited.
display.mpl\_style: \[default: None\] \[currently: None\]
: bool

        Setting this to 'default' will modify the rcParams used by matplotlib
        to give plots a more pleasing visual style by default.
        Setting this to None/False restores the values to their initial value.
display.multi\_sparse: \[default: True\] \[currently: True\]
: boolean
        "sparsify" MultiIndex display (don't display repeated
        elements in outer levels within groups)
display.notebook\_repr\_html: \[default: True\] \[currently: True\]
: boolean
        When True, IPython notebook will use html representation for
        pandas objects (if it is available).
display.pprint\_nest\_depth: \[default: 3\] \[currently: 3\]
: int
        Controls the number of nested levels to process when pretty-printing
display.precision: \[default: 7\] \[currently: 7\]
: int
        Floating point output precision (number of significant digits). This is
        only a suggestion
display.width: \[default: 80\] \[currently: 1000\]
: int
        Width of the display in characters. In case python/IPython is running in
        a terminal this can be set to None and pandas will correctly auto-detect the
        width.
        Note that the IPython notebook, IPython qtconsole, or IDLE do not run in a
        terminal and hence it is not possible to correctly detect the width.
mode.sim\_interactive: \[default: False\] \[currently: False\]
: boolean
        Whether to simulate interactive mode for purposes of testing
mode.use\_inf\_as\_null: \[default: False\] \[currently: False\]
: boolean
        True means treat None, NaN, INF, -INF as null (old way),
        False means None and NaN are null, but INF, -INF are not null
        (new way).
Call def:   pd.set\_option(self, \*args, \*\*kwds)

0 votes

J'ai essayé moi-même et j'ai obtenu le même résultat avec IDLE, mais cela fonctionne bien avec pylab. J'ai soulevé un numéro pour ça.

5 votes

Display.height : déprécié, utiliser display.height au lieu de... Je suis dans une boucle morte.

8 votes

Aujourd'hui, les options peuvent également être définies comme les affectations aux attributs de pd.options par exemple pd.options.display.max_rows = 999

233voto

Robert Rose Points 11

Essayez ça :

pd.set_option('display.expand_frame_repr', False)

Dans la documentation :

display.expand_frame_repr : booléen

S'il faut imprimer le DataFrame complet repr pour les DataFrames larges sur plusieurs lignes, max_columns est toujours respecté, mais la sortie s'enroulera sur plusieurs "pages" si sa largeur dépasse display.width. par défaut : True] [actuellement : True]

Voir : http://pandas.pydata.org/pandas-docs/stable/generated/pandas.set_option.html

8 votes

Celui-ci fonctionne pour moi. Il semble que pandas calcule mal la largeur de la sortie pour une raison quelconque, et casse les colonnes inutilement.

6 votes

Je dois littéralement faire ça tous les jours... Y a-t-il un moyen de paramétrer cela globalement quelque part ?

2 votes

@citynorman voir pandas\core\config_init.py pour le fixer définitivement.

156voto

jezrael Points 290608

Si vous souhaitez définir temporairement des options pour afficher un grand DataFrame, vous pouvez utiliser la méthode suivante option_contexte :

with pd.option_context('display.max_rows', None, 'display.max_columns', None):
    print (df)

Les valeurs des options sont restaurées automatiquement lorsque vous quittez l'application with bloc.

4 votes

Afin de ne fixer aucune limite, None peut être utilisé (au lieu de 999, etc.).

6 votes

with pd.option_context('display.max_rows', None, 'display.max_columns', None): print(energy) n'a pas fonctionné. Elle n'a pas modifié le nombre de colonnes que je souhaitais voir apparaître. En revanche, la solution de Wouter Overmeiere a fonctionné.

0 votes

Mais il y a une différence, il faut un chiffre comme -1 o 500 et non pas Aucun.

127voto

arispen Points 595

Seule l'utilisation de ces trois lignes a fonctionné pour moi :

pd.set_option('display.max_columns', None)
pd.set_option('display.expand_frame_repr', False)
pd.set_option('max_colwidth', -1)

C'était pour Anaconda Python 3.6.5, Pandas 0.23.0 et Visual Studio Code 1.26.

2 votes

Tous les messages les plus votés ci-dessus utilisent des propriétés qui sont renommées ou désactivées dans les nouvelles versions de pandas. Les 800 votes positifs là-haut ont leur place ici. Le nom de l'esquisse du magasin de fromage de Pipy/Pypi vient de faire tilt.

1 votes

pd.set_option('max_colwidth', 100) si vous voulez spécifier une largeur maximale

6 votes

Les nouvelles versions de Pandas prennent maintenant None pour l'absence de largeur de colonne maximale au lieu de -1

66voto

Définissez la largeur maximale de la colonne en utilisant :

pd.set_option('max_colwidth', 800)

Cette déclaration particulière fixe la largeur maximale à 800 pixels par colonne.

4 votes

En descendant dans l'ordre décroissant des votes, voici la première réponse qui a fonctionné pour moi afin que pandas ne tronque pas la sortie en texte clair des DataFrames. (pandas 0.22, iTerm2 3.0.13, OS X 10.12).

4 votes

C'est la seule qui a fonctionné pour moi avec Pandas 0.23.2.

1 votes

Comment se fait-il que vous n'ayez pas eu à le spécifier en tant que display.max_colwidth ? C'est ainsi qu'il est indiqué dans la documentation. Je suis d'accord pour dire que seulement max_colwidth fonctionne et est plus court à écrire, mais j'ai été surpris.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X