Pretty-wydrukuj całą serię pand / DataFrame

Często pracuję z seriami i DataFrames na terminalu. Domyślna __repr__ dla serii zwraca zmniejszoną próbkę, z niektórymi wartościami głowy i ogona, ale pozostałych brakuje.

Czy istnieje wbudowany sposób, aby wydrukować całą serię / ramkę danych? Idealnie byłoby wspierać odpowiednie wyrównanie, być może granice między kolumnami, a może nawet kodowanie kolorami dla różnych kolumn.

Author: A-B-B, 2013-10-01

9 answers

Możesz również użyć option_context, z jedną lub kilkoma opcjami:

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

Spowoduje to automatyczne przywrócenie domyślnych wartości opcji.

Jeśli pracujesz na jupyter-notebook, za pomocą display zamiast print użyje jupyter rich display logic.

 420
Author: tsvikas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-20 19:08:58

Nie ma potrzeby hakowania ustawień. Jest prosty sposób:

print(df.to_string())
 244
Author: Andrey Shokhin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-07 18:45:36

Jasne, jeśli to się często pojawia, zrób funkcję taką jak ta. Możesz nawet skonfigurować go do ładowania za każdym razem, gdy uruchamiasz 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')

Co do kolorowania, zbyt wyszukane z kolorami brzmi dla mnie przeciwnieproduktywnie, ale Zgadzam się coś w stylu bootstrap ' s .table-striped byłoby miło. Zawsze możesz utworzyć problem , Aby zasugerować tę funkcję.

 150
Author: Dan Allan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-26 10:25:43

Po zaimportowaniu pand, jako alternatywę dla korzystania z menedżera kontekstu, Ustaw takie opcje do wyświetlania całych ramek danych:

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

Pełna lista przydatnych opcji znajduje się na stronie:

pd.describe_option('display')
 41
Author: lucidyan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-20 20:14:06

Użyj pakietu tabulate:

pip install tabulate

I rozważ następujący przykład użycia:

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
Author: The Unfun Cat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-19 00:05:43

Jeśli używasz notebooka Ipython (Jupyter). Możesz użyć HTML

from IPython.core.display import HTML
display(HTML(df.to_html()))
 6
Author: R Kisyula,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-20 01:56:46

Spróbuj tego

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
Author: Liang Zulin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-07 02:21:52

Możesz to osiągnąć za pomocą poniższej metody. po prostu przekaż całkowitą nie. kolumny obecne w ramce danych jako arg do

'wyświetlacz.max_columns "

Dla NP:

df= DataFrame(..)
with pd.option_context('display.max_rows', None, 'display.max_columns', df.shape[1]):
    print(df)
 0
Author: Abhinav Ravi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-15 05:59:22

[[5]}ta odpowiedź jest odmianą wcześniejszej odpowiedzi autorstwa lucidyan . Sprawia, że kod jest bardziej czytelny, unikając użycia set_option.

Po zaimportowaniu pand, jako alternatywę dla korzystania z menedżera kontekstu, Ustaw takie opcje do wyświetlania dużych ramek danych:

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

Następnie możesz użyć display(df) lub po prostu df Jeśli używasz notatnika, w przeciwnym razie print(df).

 0
Author: A-B-B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-27 19:18:13