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.

28voto

BrenBarn Points 63718

Vous pouvez utiliser print df.describe().to_string() pour le forcer à afficher la table entière. (Vous pouvez utiliser to_string() comme ceci pour n'importe quel DataFrame. Le résultat de describe est juste un DataFrame lui-même).

Le 8 est le nombre de lignes dans le DataFrame contenant la "description" (parce que le 8 est le nombre de lignes dans le DataFrame contenant la "description"). describe calcule 8 statistiques (min, max, moyenne, etc.).

27voto

bmu Points 7109

Vous pouvez ajuster les options d'impression de pandas avec set_printoptions .

In [3]: df.describe()
Out[3]: 
<class 'pandas.core.frame.DataFrame'>
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
dtypes: float64(7)

In [4]: pd.set_printoptions(precision=2)

In [5]: df.describe()
Out[5]: 
            x1       x2       x3       x4       x5       x6       x7
count      8.0      8.0      8.0      8.0      8.0      8.0      8.0
mean   69024.5  69025.5  69026.5  69027.5  69028.5  69029.5  69030.5
std       17.1     17.1     17.1     17.1     17.1     17.1     17.1
min    69000.0  69001.0  69002.0  69003.0  69004.0  69005.0  69006.0
25%    69012.2  69013.2  69014.2  69015.2  69016.2  69017.2  69018.2
50%    69024.5  69025.5  69026.5  69027.5  69028.5  69029.5  69030.5
75%    69036.8  69037.8  69038.8  69039.8  69040.8  69041.8  69042.8
max    69049.0  69050.0  69051.0  69052.0  69053.0  69054.0  69055.0

Cependant, cela ne fonctionnera pas dans tous les cas, car pandas détecte la largeur de votre console et n'utilisera que la fonction to_string si la sortie tient dans la console (voir la docstring de set_printoptions Dans ce cas, vous pouvez appeler explicitement to_string comme répondu par BrenBarn .

Mise à jour

Avec la version 0.10, la façon dont les cadres de données larges sont imprimés modifié :

In [3]: df.describe()
Out[3]: 
                 x1            x2            x3            x4            x5  \
count      8.000000      8.000000      8.000000      8.000000      8.000000   
mean   59832.361578  27356.711336  49317.281222  51214.837838  51254.839690   
std    22600.723536  26867.192716  28071.737509  21012.422793  33831.515761   
min    31906.695474   1648.359160     56.378115  16278.322271     43.745574   
25%    45264.625201  12799.540572  41429.628749  40374.273582  29789.643875   
50%    56340.214856  18666.456293  51995.661512  54894.562656  47667.684422   
75%    75587.003417  31375.610322  61069.190523  67811.893435  76014.884048   
max    98136.474782  84544.484627  91743.983895  75154.587156  99012.695717   

                 x6            x7  
count      8.000000      8.000000  
mean   41863.000717  33950.235126  
std    38709.468281  29075.745673  
min     3590.990740   1833.464154  
25%    15145.759625   6879.523949  
50%    22139.243042  33706.029946  
75%    72038.983496  51449.893980  
max    98601.190488  83309.051963  

De plus, l'API permettant de définir les options de pandas a changé :

In [4]: pd.set_option('display.precision', 2)

In [5]: df.describe()
Out[5]: 
            x1       x2       x3       x4       x5       x6       x7
count      8.0      8.0      8.0      8.0      8.0      8.0      8.0
mean   59832.4  27356.7  49317.3  51214.8  51254.8  41863.0  33950.2
std    22600.7  26867.2  28071.7  21012.4  33831.5  38709.5  29075.7
min    31906.7   1648.4     56.4  16278.3     43.7   3591.0   1833.5
25%    45264.6  12799.5  41429.6  40374.3  29789.6  15145.8   6879.5
50%    56340.2  18666.5  51995.7  54894.6  47667.7  22139.2  33706.0
75%    75587.0  31375.6  61069.2  67811.9  76014.9  72039.0  51449.9
max    98136.5  84544.5  91744.0  75154.6  99012.7  98601.2  83309.1

0 votes

Je préfère utiliser la méthode max_columns mentionnée par lodagro, mais je suis heureux que vous ayez mentionné le mot-clé precision, car cela aidera à nettoyer les statistiques qui sont affichées. Merci !

23voto

Wilfred Hughes Points 3507

Vous pouvez régler l'affichage de sortie pour qu'il corresponde à la largeur actuelle de votre terminal :

pd.set_option('display.width', pd.util.terminal.get_terminal_size()[0])

7 votes

@wouter-overmeire dit que pandas le fait automatiquement mais cela ne semble pas être le cas, du moins pas avec la version 0.18.0. Cependant, si vous utilisez pd.set_option('display.width', None) dans un terminal, "pandas va correctement auto-détecter la largeur" .

0 votes

Exactement ! Il ne le fait pas par défaut. En le mettant sur None, il ignore la largeur du tout. Peut-être que c'est un bug dans Pandas ou peut-être que cela a à voir avec le terminal gnome ? Merci Wilfred Hughes !

0 votes

@mfripp : display.width=None est traité comme "illimité" et non "auto". Cela signifie qu'il appartiendra à votre programme de terminal d'envelopper les longues lignes - généralement avec de vilains résultats.

14voto

hamx0r Points 1225

Selon le documentation pour la v0.18.0 si vous travaillez dans un terminal (c'est-à-dire, sans IPython notebook, qtconsole ou IDLE ), Pandas peut détecter automatiquement la largeur de votre écran et s'adapter à la volée au nombre de colonnes qu'il affiche :

pd.set_option('display.large_repr', 'truncate')
pd.set_option('display.max_columns', 0)

1 votes

Cela a fonctionné pour moi, merci ! J'utilise Pandas 0.22.0 (dernière version en date du 8 février 2018) avec l'application Terminal intégrée sous OS X 10.11.6.

14voto

debaonline4u Points 507

J'ai utilisé ces paramètres lorsque l'échelle des données était élevée.

# Environment settings: 
pd.set_option('display.max_column', None)
pd.set_option('display.max_rows', None)
pd.set_option('display.max_seq_items', None)
pd.set_option('display.max_colwidth', 500)
pd.set_option('expand_frame_repr', True)

Vous pouvez vous référer à la documentation aquí .

0 votes

Cela a parfaitement fonctionné pour moi dans vs_code

0 votes

J'ai aussi travaillé dans le cadre de la collaboration avec Google !

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