Pretty-print toute une série de Pandas / DataFrame

je travaille beaucoup avec les séries et les 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 manque.

y a-t-il un moyen d'Imprimer la série / DataFrame entière? Idéalement, il serait en faveur de l'alignement approprié, peut-être les frontières entre les colonnes, et peut-être même la couleur-codage pour les différentes colonnes.

278
demandé sur A-B-B 2013-10-01 23:46:07

9 réponses

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

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

cela ramènera automatiquement les options à leurs valeurs par défaut.

si vous travaillez sur Jupyter-notebook, en utilisant display au lieu de print utilisera la logique d'affichage riche de jupyter.

420
répondu tsvikas 2018-09-20 19:08:58

pas besoin de hacker les paramètres. Il y a un moyen simple:

print(df.to_string())
244
répondu Andrey Shokhin 2016-10-07 18:45:36

bien Sûr, si cela vient beaucoup, faire une fonction comme celle-ci. Vous pouvez même le configurer pour le charger à chaque démarrage D'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')

quant à la coloration, obtenir trop élaboré avec des couleurs semble contre-productif pour moi, mais je suis d'accord quelque chose comme bootstrap .table-striped serait agréable. Vous pouvez toujours créer un problème à proposer cette fonctionnalité.

150
répondu Dan Allan 2017-02-26 10:25:43

après l'importation de pandas, comme une alternative à l'utilisation du gestionnaire de contexte, définir tels options pour afficher des images de données entières:

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 la liste complète des options utiles, voir:

pd.describe_option('display')
41
répondu lucidyan 2018-09-20 20:14:06

utiliser le paquet tabulate:

pip install tabulate

et considérer l'exemple d'usage suivant:

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 |
+----+--------------+---------+-------+
18
répondu The Unfun Cat 2018-06-19 00:05:43

si vous utilisez L'ordinateur portable Ipython (Jupyter). Vous pouvez utiliser HTML

from IPython.core.display import HTML
display(HTML(df.to_html()))
6
répondu R Kisyula 2018-03-20 01:56:46

Essayez cette

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)
4
répondu Liang Zulin 2017-12-07 02:21:52

vous pouvez réaliser ceci en utilisant la méthode ci-dessous. fais passer le non total. des colonnes présentes dans le datagramme comme arg à

affichage".max_columns '

pour eg:

df= DataFrame(..)
with pd.option_context('display.max_rows', None, 'display.max_columns', df.shape[1]):
    print(df)
0
répondu Abhinav Ravi 2018-06-15 05:59:22

cette réponse est une variation de la précédente réponse de lucidyan . Elle rend le code plus lisible en évitant l'utilisation de set_option .

après l'importation de pandas, comme une alternative à l'utilisation du gestionnaire de contexte, définir tels options pour l'affichage de grandes images de données:

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()

Après cela, vous pouvez utiliser display(df) ou tout simplement df si vous utilisez un ordinateur portable, sinon print(df) .

0
répondu A-B-B 2018-09-27 19:18:13