Panda: Pengaturan no. dari baris maks

138

Saya memiliki masalah melihat yang berikut ini DataFrame:

n = 100
foo = DataFrame(index=range(n))
foo['floats'] = np.random.randn(n)
foo

Masalahnya adalah ia tidak mencetak semua baris per default di notebook ipython, tapi saya harus mengiris untuk melihat baris yang dihasilkan. Bahkan opsi berikut tidak mengubah output:

pd.set_option('display.max_rows', 500)

Apakah ada yang tahu cara menampilkan seluruh array?

Andy
sumber
Ketika saya menjalankan kode Anda di buku catatan default (yaitu tidak ada profil konfigurasi khusus), saya mendapatkan tabel yang cukup dicetak yang dapat digulir dengan semua nilai. FYI, panda saya .__ version__ = 0.9.1 (tidak yakin apakah ini penting)
BubbleGuppies
Maksud saya shell biasa, bukan ipython
Ryan Saxe
Saya merasa ini mungkin bug di 0,11 + ...
Andy Hayden
Hai Andy. Apakah ini sudah dikonfirmasi oleh Wes? Di mana saya dapat mengajukan bug ini? Apakah ada solusinya?
Andy
Saya baru saja mengajukannya di sini , saya tahu ada beberapa perubahan menit terakhir dalam 0,11 ke dataFrame repr jadi saya menemukan mereka dalam laporan bug. Akan memberi tahu Anda pemecahan masalah.
Andy Hayden

Jawaban:

233

Setel display.max_rows:

pd.set_option('display.max_rows', 500)

Untuk versi panda yang lebih lama (<= 0.11.0) Anda harus mengubah keduanya display.heightdan display.max_rows.

pd.set_option('display.height', 500)
pd.set_option('display.max_rows', 500)

Lihat juga pd.describe_option('display').

Anda dapat mengatur opsi hanya sementara untuk kali ini seperti ini:

from IPython.display import display
with pd.option_context('display.max_rows', 100, 'display.max_columns', 10):
    display(df) #need display to show the dataframe when using with in jupyter
    #some pandas stuff

Anda juga dapat mengatur ulang opsi kembali ke nilai standarnya seperti ini:

pd.reset_option('display.max_rows')

Dan mengatur ulang semuanya kembali:

pd.reset_option('all')

Wouter Overmeire
sumber
6
+1 untuk pd.describe_option ('display'), saya tidak tahu semua opsi
nom-mon-ir
41
Tinggi sekarang sudah tidak digunakan lagi sehingga opsi display.max_rows sudah cukup.
hanleyhansen
9
Untuk siapa pun yang hanya melihat jawaban yang diterima: gunakan with pd.option_context('display.height', 500, 'display.max_rows', 500):untuk hanya mengatur ini sementara.
BallpointBen
Saya harus memperbaiki atau memberikan cara terbaik untuk mencapai ini. Gunakan Tidak Ada dan jangan batasi 500. #Tampilkan sementara semua baris dan kolom dengan pd.option_context ('display.max_rows', None, 'display.max_columns', None): display (df_facilities) Kode di atas hanya akan berlaku dalam sel yang berisi kode sehingga tidak perlu mengatur ulang di sel lain.
MGB.py
35

Secara pribadi, saya suka mengatur opsi langsung dengan pernyataan tugas karena mudah ditemukan melalui penyelesaian tab berkat iPython. Saya merasa sulit untuk mengingat apa nama opsi yang tepat, jadi metode ini bekerja untuk saya.

Sebagai contoh, yang harus saya ingat adalah bahwa itu dimulai dengan pd.options

pd.options.<TAB>

masukkan deskripsi gambar di sini

Sebagian besar opsi tersedia di bawah display

pd.options.display.<TAB>

masukkan deskripsi gambar di sini

Dari sini, saya biasanya menampilkan seperti apa nilai saat ini:

pd.options.display.max_rows
60

Saya kemudian mengaturnya menjadi apa yang saya inginkan:

pd.options.display.max_rows = 100

Selain itu, Anda harus mengetahui manajer konteks untuk opsi, yang sementara mengatur opsi di dalam blok kode. Masukkan nama opsi sebagai string diikuti oleh nilai yang Anda inginkan. Anda dapat memasukkan sejumlah opsi dalam baris yang sama:

with pd.option_context('display.max_rows', 100, 'display.max_columns', 10):
    some pandas stuff

Anda juga dapat mengatur ulang opsi kembali ke nilai standarnya seperti ini:

pd.reset_option('display.max_rows')

Dan mengatur ulang semuanya kembali:

pd.reset_option('all')

Masih bagus untuk mengatur opsi melalui pd.set_option. Saya hanya menemukan menggunakan atribut secara langsung lebih mudah dan ada sedikit kebutuhan untuk get_optiondan set_option.

Ted Petrou
sumber
4
with pd.option_contextadalah metode terbersih di antara jawaban-jawaban ini; paling tidak efek samping.
ijoseph
10

Itu sudah ditunjukkan dalam komentar ini dan di jawaban ini , tetapi saya akan mencoba memberikan jawaban yang lebih langsung untuk pertanyaan:

from IPython.display import display
import numpy as np
import pandas as pd

n = 100
foo = pd.DataFrame(index=range(n))
foo['floats'] = np.random.randn(n)

with pd.option_context("display.max_rows", foo.shape[0]):
    display(foo)

pandas.option_context tersedia sejak panda 0.13.1 ( catatan rilis panda 0.13.1 ). Menurut ini ,

[itu] memungkinkan Anda menjalankan kode kunci dengan satu set opsi yang kembali ke pengaturan sebelumnya ketika Anda keluar dari blok with.

Guilherme Beltramini
sumber
9

Seperti @hanleyhansen catat dalam komentar, pada versi 0.18.1, display.heightopsi ini sudah tidak digunakan lagi, dan mengatakan "gunakan display.max_rowssaja". Jadi Anda hanya perlu mengkonfigurasinya seperti ini:

pd.set_option('display.max_rows', 500)

Lihat Catatan Rilis - dokumentasi panda 0.18.1 :

Display.height yang sudah tidak digunakan lagi, display.width sekarang hanya opsi pemformatan yang tidak mengontrol pemicuan ringkasan, mirip dengan <0.11.0.

nealmcb
sumber
7
pd.set_option('display.max_rows', 500)
df

Tidak berfungsi di Jupyter!
Alih-alih gunakan:

pd.set_option('display.max_rows', 500)
df.head(500)
Adrien Renaud
sumber
3

Seperti dalam jawaban untuk pertanyaan serupa , tidak perlu untuk meretas pengaturan. Lebih mudah untuk menulis:

print(foo.to_string())
Ninjakannon
sumber
1
Anda seharusnya tidak mengubahnya menjadi string. Bukan itu yang diminta Andy.
simtim
1
@simtim Andy bertanya bagaimana "menampilkan seluruh array". Ini akan melakukan itu dan jauh lebih sederhana daripada jawaban yang diterima.
Ninjakannon