Tüm bir Panda Serisi / DataFrame'i güzel bir şekilde yazdırın


654

Terminalde Series ve DataFrames ile çok çalışıyorum. __repr__Bir Seri için varsayılan değer, bazı kafa ve kuyruk değerlerine sahip, ancak geri kalanı eksik olan azaltılmış bir örnek döndürür.

Seri / DataFrame'in tamamını güzel bir şekilde yazdırmanın yerleşik bir yolu var mı? İdeal olarak, uygun hizalamayı, belki de sütunlar arasındaki sınırları ve hatta farklı sütunlar için renk kodlamasını bile destekleyecektir.


19
Azaltılmış çıktı, pd.set_option('display.max_rows', 1000)örneğin kullanarak değiştirebileceğiniz varsayılan seçeneklerden kaynaklanır , renklendirme başka bir şeydir, html repr çıktısını renklendirmekten söz ediyorsunuz. Bunun yerleşik olduğunu sanmıyorum.
EdChum

2
@EdChum: teşekkürler, bunu biliyordum display.max_rows, sorun şu ki çoğu zaman çıktının kısaltılmasını istiyorum. Sadece zaman zaman tüm çıktıyı görmek istiyorum. Seçeneği çok yüksek bir değere ayarlayabilir, varsayılanı kullanabilir __repr__, sonra değeri geri alabilirim, ancak bu biraz hantal görünüyor ve bu durumda kendi güzel yazdırma işlevimi de yazabilirim.
Dun Peal

1
@EdChum: renklerle ilgili - bu bir renkli terminaldir, bu nedenle değerleri birbirinden kolayca ayırt etmek için her bir satırın farklı bir renkte basılması güzel olurdu. Pandalar, renk dahil olmak üzere gelişmiş terminal özelliklerini kullanan ipython ile iyi çalışır, bu yüzden Pandaların bazı renklendirme özelliklerine sahip olup olmadığını merak ediyordum.
Dun Peal

1
Terminal kabuğu olarak IPython yerine IPython Notebook'da Pandalar kullanıyorum set_option, renklendirmeyi destekleyen herhangi bir seçenek görmüyorum , belki bazı css veya çıktı biçimlendirmesi uygulamak için bir eklenti olarak yapılabilecek bir şey. Bunu başarabileceğini düşünüyorum tek yolu bu
EdChum 21

Yanıtlar:


867

option_context, Seçeneğini bir veya daha fazla seçenekle de kullanabilirsiniz :

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

Bu, seçenekleri otomatik olarak önceki değerlerine döndürür.

Jupyter-notebook üzerinde çalışıyorsanız, display(df)yerine print(df)jupyter rich display mantığı (böyle) kullanır .


2
Teşekkür ederim! Maksimum değerleri ayarlamanın Noneonları kapatacağını unutmayın. Kullanımı with pd.option_context()çok net ve açık bir şekilde neler olduğunu seçenek belgeleri ve üretimdeki diğer değişiklikleri örneğin istenebilir biçimlendirme kullanarak nasıl elde temizlemek yapar precision, max_colwidth, expand_frame_repr, colheader_justify, date_yearfirst, encoding, ve çok çok daha fazla: pandas.pydata.org/pandas -docs / stable / options.html
nealmcb

37
Merak eden herkes için: Jupyter kullanırken, display(df)yerine kullanınprint(df)
tsvikas

3
3 burada neyi temsil ediyor?
Mona Jalal

1
DataFrame gerçekten büyükse, geçici olarak bir .csv olarak yazmak ve Jupyter Lab'ın hızlı csv görüntüleyicisini kullanmak
Dan

Display.max_columns için bu '3' seçeneği_context parametresini varsayılan değerine ayarlamak için 'None' olmalıdır. Sabit.
Trutane

605

Ayarları hacklemeye gerek yok. Basit bir yol var:

print(df.to_string())

1
Kaç sütununuz var? Ben 1300 sütun ile kontrol ettik ve iyi çalışır: itertools ithalat kombinasyonları dize ithalat ascii_letters df = pd.DataFrame (veri = [[0] * 1326], index = [0], sütunlar = [(a + b) a, b kombinasyonlarında (ascii_letters, 2)])
Andrey Shokhin

11
Kullanımı with pd.option_context()çok daha net ve açık bir şekilde neler olduğunu seçenek belgeleri ve üretimdeki diğer değişiklikleri, istenebilir biçimlendirme örn kullanarak nasıl elde temizlemek yapar precision, max_colwidth, expand_frame_repr, colheader_justify, date_yearfirst, encoding, ve çok çok daha fazla: pandas.pydata.org/ pandas-docs / stable / options.html
nealmcb

2
Diğer cevapları tercih ediyorum çünkü çok fazla sütunum varsa ve ekranım bunları gösterecek kadar geniş değilse, örneğimde garip görünüyor. Sütun adları ve verileri ayrı satır sonları yapar, bu nedenle hangi verilerin artık hangi sütun adına ait olduğunu görmek kolay değildir.
Dremet

9
Asker "güzel baskı" bir çözüm istedi. Bu değil . Bu Jupyter Notebook'da kullanılmış olsaydı, yerleşik güzel ekran hiç kullanılmazdı. pd.set_option('display.max_rows', None)Yazdırmadan hemen önce kullanmak daha iyidir df.
LS

@LS, bir python 3.x Jupyter dizüstü bilgisayarda hem pd.set_option ('display.max_rows', None) ve df.to_string () öğelerini test etti ve yazdırıldığında aynı çıktıyı üretti. Yukarıdaki yanıt önceki sürümlerde işe yaramadıysa, şimdi çalışır.
H Froedge

166

Elbette, eğer bu çok ortaya çıkarsa, böyle bir işlev yapın. IPython'u her başlattığınızda yüklenecek şekilde bile yapılandırabilirsiniz: 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')

Renklendirmeye gelince, renklerle çok ayrıntılı hale gelmek bana zarar veriyor, ancak bootstrap.table-striped gibi bir şeyin hoş olacağını kabul ediyorum . Bu özelliği önermek için her zaman bir sorun oluşturabilirsiniz .


5
Bağlantı öldü. Belki de ipython.org/ipython-doc/dev/config/intro.html olmalı ?
ostrokach

2
Birisi, herhangi biri, hatta yazar bile, bağlantıyı doğrulayıp düzeltebilir ve bu yorumları eski olarak işaretleyebilirse harika olurdu.
Aaron Hall

Bu, yazdırma işleminden önce seçeneğin varsayılan olarak ayarlandığını varsaydığı için kötüdür, bu durum böyle değildir ve bu nedenle beklenmedik davranışlara yol açabilir. Seçenek bağlamını with ifadesiyle birlikte kullanmak daha sağlam bir seçenektir ve daha önce ayarlanan her şeye geri dönecektir.
İstilacı

104

Panda yöneticisini içe aktardıktan sonra, bağlam yöneticisini kullanmaya alternatif olarak, tüm veri çerçevelerini görüntülemek için bu seçenekleri ayarlayın:

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

Yararlı seçeneklerin tam listesi için bkz:

pd.describe_option('display')

1
Bunu eklediğiniz için teşekkürler. Birden fazla veri çerçevesi görüntülemek istiyorsanız, "Hiçbiri" her veri çerçevesinin gerçek uzunluğundan çok daha iyidir.
Dremet

5
@Corrumpo Bazı seçenekler için tam temsil istiyorsanız -1int değerini kullanmalısınızNone
lucidyan

display.Seçenek adında önek gerekli değildir. Örneğin, set_option('max_columns')eşit derecede iyi çalışır.
Acumenus

Çok teşekkürler :)
Orsiris de Jong

45

Tablo paketini kullanın:

pip install tabulate

Ve aşağıdaki örnek kullanımı düşünün:

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 |
+----+--------------+---------+-------+

tabulate bir pd.Series yazdırırken saman gider.
eliu

2
@eliu Bilgi için teşekkürler. Her zaman varpd_series.to_frame()
The Unfun Cat

20

Ipython Notebook (Jupyter) kullanıyorsanız. HTML kullanabilirsiniz

from IPython.core.display import HTML
display(HTML(df.to_html()))

1
diğer çözümler, Tnx ile karşılaştırmak için çıktı göstermek lütfen.
vwvan

7
Bununla büyük bir Dataframe göstermeye dikkat edin. Belleğiniz tükenebilir ve .ipyndb dosyanızdaki ham kodu düzenlemediğiniz sürece hiçbir zaman dizüstü bilgisayarınızı yeniden açamayabilirsiniz. Gerçek hikaye;)
FLBKernel

Bu benim için en iyi seçenek. Tablo renklendirme ile tam olarak görüntülenir. Güzel bir!
Mart'ta Ololade

20

kullanma pd.options.display

Bu cevap önceki cevabın lucidyan tarafından bir çeşitlemesidir . Kullanmadan kaçınarak kodu daha okunabilir hale getirirset_option .

Panda yöneticisini içe aktardıktan sonra, bağlam yöneticisini kullanmaya alternatif olarak, büyük veri çerçeveleri görüntülemek için bu seçenekleri ayarlayın:

def set_pandas_display_options() -> None:
    # Ref: https://stackoverflow.com/a/52432757/
    display = pd.options.display

    display.max_columns = 1000
    display.max_rows = 1000
    display.max_colwidth = 199
    display.width = None
    # display.precision = 2  # set as needed

set_pandas_display_options()

Bundan sonra, display(df)ya sadece dfbir dizüstü bilgisayar kullanıyorsanız kullanabilirsiniz , aksi takdirdeprint(df) .

kullanma to_string

Pandalar 0.25.3 DataFrame.to_stringveSeries.to_string biçimlendirme seçenekleri kabul yöntemleri.

kullanma to_markdown

İhtiyacınız olan şey markdown çıktısıysa, Pandas 1.0.0 DataFrame.to_markdownveSeries.to_markdown yöntemleri vardır.

kullanma to_html

İhtiyacınız olan şey HTML çıktısıysa, Pandas 0.25.3'te bir DataFrame.to_htmlyöntem vardır, ancak a değil Series.to_html. Not bir o Seriesolabilir dönüştürülmüş bir etmek DataFrame.


Evet, set_option yerine Jupyter'da görüntülemek için daha zarif bir yol gibi görünüyor. Görüntülenen çıktıyı sola hizalamanın bir yolu var mı? Görüntülenen veri çerçevesinin sağ satırları varsayılan olarak sağa hizalanır.
vinsinraw

11

Bunu dene

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)

3

Bunu aşağıdaki yöntemi kullanarak gerçekleştirebilirsiniz. sadece toplam no. DataFrame içinde argüman olarak mevcut olan sütunların

'Display.max_columns'

Örneğin:

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

-1

Display () işlevini kullanmayı deneyin. Bu otomatik olarak Yatay ve dikey kaydırma çubuklarını kullanır ve bununla print () yerine farklı veri kümelerini kolayca görüntüleyebilirsiniz.

display(dataframe)

display () de doğru hizalamayı destekler.

Ancak, veri kümesini daha güzel hale getirmek istiyorsanız kontrol edebilirsiniz pd.option_context() . Veri çerçevesini açıkça göstermek için birçok seçeneğe sahiptir.

Not - Jupyter Notebook kullanıyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.