it-swarm.com.de

Hübsches Drucken einer gesamten Pandas -Reihe / eines DataFrame

Ich arbeite viel mit Serien und Datenrahmen auf dem Terminal. Der Standardwert __repr__ für eine Serie gibt eine reduzierte Stichprobe mit einigen Head- und Tail-Werten zurück, der Rest fehlt jedoch.

Gibt es eine integrierte Möglichkeit, die gesamte Serie/den gesamten DataFrame hübsch zu drucken? Im Idealfall würde dies eine ordnungsgemäße Ausrichtung, möglicherweise Ränder zwischen Spalten und möglicherweise sogar eine Farbcodierung für die verschiedenen Spalten unterstützen.

469
Dun Peal

Sie können auch option_context mit einer oder mehreren Optionen verwenden:

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

Dadurch werden die Optionen automatisch auf ihre vorherigen Werte zurückgesetzt.

Wenn Sie mit jupyter-notebook arbeiten und display(df) anstelle von print(df) verwenden, wird die Anzeigelogik für jupyter-rich verwendet (wie so) .

634
tsvikas

Keine Notwendigkeit, Einstellungen zu hacken. Es gibt einen einfachen Weg:

print(df.to_string())
463
Andrey Shokhin

Klar, wenn das viel auftaucht, mache eine Funktion wie diese. Sie können es sogar so konfigurieren, dass es bei jedem Start von IPython geladen wird: 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')

Was das Ausmalen angeht, klingt es für mich kontraproduktiv, mit Farben zu arbeiten, aber ich bin damit einverstanden, dass bootstraps .table-striped nett wäre. Sie können jederzeit ein Problem erstellen diese Funktion vorschlagen.

158
Dan Allan

Legen Sie nach dem Importieren von Pandas als Alternative zur Verwendung des Kontextmanagers die folgenden Optionen fest, um ganze Datenrahmen anzuzeigen:

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

Eine vollständige Liste nützlicher Optionen finden Sie unter:

pd.describe_option('display')
80
lucidyan

Verwenden Sie das Paket tabulate:

pip install tabulate

Und betrachten Sie die folgende Beispielverwendung:

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

Wenn Sie Ipython Notebook (Jupyter) verwenden. Sie können HTML verwenden

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

Versuche dies

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

Diese Antwort ist eine Variation des vorherigen Antwort von lucidyan . Es macht den Code lesbarer, indem die Verwendung von set_option vermieden wird.

Legen Sie nach dem Importieren von Pandas als Alternative zur Verwendung des Kontextmanagers die folgenden Optionen fest, um große Datenrahmen anzuzeigen:

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

Danach können Sie display(df) oder nur df verwenden, wenn Sie ein Notebook verwenden, andernfalls print(df).

7
Acumenus

Sie können dies mit der folgenden Methode erreichen. Übergeben Sie einfach die Gesamtzahl. von Spalten, die im DataFrame als Argument für vorhanden sind

'display.max_columns'

Zum Beispiel:

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