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.
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.
pas besoin de hacker les paramètres. Il y a un moyen simple:
print(df.to_string())
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é.
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')
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 |
+----+--------------+---------+-------+
si vous utilisez L'ordinateur portable Ipython (Jupyter). Vous pouvez utiliser HTML
from IPython.core.display import HTML
display(HTML(df.to_html()))
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)
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)
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)
.