web-dev-qa-db-fra.com

Pretty-print entier Pandas Series / DataFrame

Je travaille beaucoup avec Series et DataFrames sur le terminal. La valeur par défaut __repr__ pour une série renvoie un échantillon réduit, avec quelques valeurs de tête et de queue, mais le reste est manquant.

Existe-t-il un moyen intégré d’imprimer joliment l’ensemble de Series/DataFrame? Idéalement, cela permettrait un bon alignement, peut-être des frontières entre les colonnes et même un code couleur pour les différentes colonnes.

469
Dun Peal

Vous pouvez également utiliser le option_context , avec une ou plusieurs options:

_with pd.option_context('display.max_rows', None, 'display.max_columns', None):  # more options can be specified also
    print(df)
_

Cela ramènera automatiquement les options à leurs valeurs précédentes.

Si vous travaillez sur jupyter-notebook, utiliser display(df) au lieu de print(df) utilisera la logique d'affichage riche de jupyter (comme si) .

634
tsvikas

Pas besoin de pirater les paramètres. Il y a un moyen simple:

print(df.to_string())
463
Andrey Shokhin

Bien sûr, si cela revient souvent, créez une fonction comme celle-ci. Vous pouvez même le configurer pour qu'il se charge chaque fois que vous démarrez IPython: https://ipython.org/ipython-doc/1/config/overview.html

def print_full(x):
    pd.set_option('display.max_rows', len(x))
    print(x)
    pd.reset_option('display.max_rows')

Pour ce qui est de la coloration, être trop élaboré avec des couleurs me semble contre-productif, mais je suis d’accord pour dire que quelque chose comme le bootstrap .table-striped serait bien. Vous pouvez toujours créer un problème suggérer cette fonctionnalité.

158
Dan Allan

Après avoir importé des pandas, au lieu d'utiliser le gestionnaire de contexte, définissez ces options pour afficher des images complètes:

pd.set_option('display.max_columns', None)  # or 1000
pd.set_option('display.max_rows', None)  # or 1000
pd.set_option('display.max_colwidth', -1)  # or 199

Pour une liste complète des options utiles, voir:

pd.describe_option('display')
80
lucidyan

Utilisez le package tabulate:

pip install tabulate

Et considérons l'utilisation d'exemple suivante:

import pandas as pd
from io import StringIO
from tabulate import tabulate

c = """Chromosome Start End
chr1 3 6
chr1 5 7
chr1 8 9"""

df = pd.read_table(StringIO(c), sep="\s+", header=0)

print(tabulate(df, headers='keys', tablefmt='psql'))

+----+--------------+---------+-------+
|    | Chromosome   |   Start |   End |
|----+--------------+---------+-------|
|  0 | chr1         |       3 |     6 |
|  1 | chr1         |       5 |     7 |
|  2 | chr1         |       8 |     9 |
+----+--------------+---------+-------+
37
The Unfun Cat

Si vous utilisez Ipython Notebook (Jupyter). Vous pouvez utiliser HTML

from IPython.core.display import HTML
display(HTML(df.to_html()))
13
R Kisyula

Essaye ça

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)
8
Liang Zulin

Cette réponse est une variante de l'antérieur réponse de lucidyan . Cela rend le code plus lisible en évitant l'utilisation de set_option.

Après avoir importé des pandas, au lieu d'utiliser le gestionnaire de contexte, définissez ces options pour afficher des images de grande taille:

def set_pandas_options() -> None:
    pd.options.display.max_columns = 1000
    pd.options.display.max_rows = 1000
    pd.options.display.max_colwidth = 199
    pd.options.display.width = None
    # pd.options.display.precision = 2  # set as needed

set_pandas_options()

Ensuite, vous pouvez utiliser display(df) ou simplement df si vous utilisez un ordinateur portable, sinon print(df).

7
Acumenus

Vous pouvez y parvenir en utilisant la méthode ci-dessous. il suffit de passer le non total. des colonnes présentes dans le DataFrame comme argument à

'display.max_columns'

Pour par exemple:

df= DataFrame(..)
with pd.option_context('display.max_rows', None, 'display.max_columns', df.shape[1]):
    print(df)
1
Abhinav Ravi