Pandalar veri çerçevesinde çok uzun dizeleri tamamen yazdırın


116

Görünüşte çok basit olan şeyle mücadele ediyorum, çok uzun diziler içeren bir panda veri çerçevem ​​var.

df = pd.DataFrame({'one' : ['one', 'two', 
      'This is very long string very long string very long string veryvery long string']})

Şimdi aynısını yazdırmaya çalıştığımda, tam dizeyi görmüyorum, dizenin yalnızca bir kısmını görmeyi tercih ediyorum.

Aşağıdaki seçenekleri denedim

  • kullanma print(df.iloc[2])
  • kullanma to_html
  • kullanma to_string
  • Yığın akışı yanıtlarından biri, pandalar görüntüleme seçeneğini kullanarak sütun genişliğini artırmak için önerildi, bu da işe yaramadı.
  • Bana nasıl set_printoptionsyardım edeceğini de anlamadım .

Herhangi bir fikir takdir edildi. Çok basit görünüyor, ama alamıyorum!

Yanıtlar:


176

Sen kullanabilirsiniz options.display.max_colwidthvarsayılan temsilinde daha görmek istiyorum belirtmek için:

In [2]: df
Out[2]:
                                                 one
0                                                one
1                                                two
2  This is very long string very long string very...

In [3]: pd.options.display.max_colwidth
Out[3]: 50

In [4]: pd.options.display.max_colwidth = 100

In [5]: df
Out[5]:
                                                                               one
0                                                                              one
1                                                                              two
2  This is very long string very long string very long string veryvery long string

Ve gerçekten, bir değere erişerek (bir satır olarak değil, bir skaler olarak df.iloc[2]) sadece incelemek istiyorsanız, tam dizeyi de görürsünüz:

In [7]: df.iloc[2,0]    # or df.loc[2,'one']
Out[7]: 'This is very long string very long string very long string veryvery long string'

2
df.iloc [2,0] - çalışmıyor - Birinci ve üçüncü satırı
basacağım

Üçüncü satırın ve ilk sütunun elemanını istiyorsanız işe yarar. Başka bir şey istiyorsanız, lütfen yeni bir soru açın.
joris

Çalışıyor, thx! 1 sütunda posta kodları listem var ve bir işlevi kullanarak min ve maks sütunlarını bulmak için uygula seçeneğini kullanın: df ['zipcodeMinMax'] = df.loc [:, ['zipcodeList']]. Apply (createMinMaxZipcode, axis = 1). Yani fonksiyon içinde dizide to_string yapıyorum (stringZipcodes = zipcodeList.to_string (header = False, index = False)). Daha uzun posta kodu listeleri sonunda 3 nokta ile sonuçlandı, örneğin "1111 ...". Gerçekten de değerleri indeks ve sütuna (skaler olarak) göre seçerseniz bu gerçekleşmez. Sorum: neden bu davranış? Uygulamayı etkilemek için görüntüleme seçeneklerini ayarlamak bana garip geliyor mu? Teşekkürler!
Wouter

1
@Wouter Farklı bir sorunuz varsa, burada yorum yapmak yerine yeni bir soru sormanız daha iyi
joris

1
Bu, çok satırlı bir paragraf gibi daha büyük bir dizede çalışmaz.
devssh

37

pd.set_option('display.max_colwidth', -1)Otomatik satır sonları ve çok satırlı hücreler için kullanın .

Bu , jüpiter ekranının pandalarla birlikte nasıl kullanılacağına dair harika bir kaynaktır.


6
pd.set_option('display.max_colwidth', None)daha yeni sürümler için
cookiemonster

Bu en iyi cevap
clancy

17

Oldukça basit bir diğer yaklaşım, liste işlevini çağırmaktır:

list(df['one'][2])
# output:
['This is very long string very long string very long string veryvery long string']

Söylemeye değmez, bu tüm sütunları listelemek için uygun değil, ama basit bir satır için - neden olmasın


1
Eğer df'nizi bazı arama kriterlerine göre aşağı indirdiyseniz ve tek bir satıra indirgendiyseniz, bu işe yaramaz. İhtiyaçları gidermek için en basit yol bu zaten ve işe yaramasını dilerdim, ama neden olmadığını bilmiyorum. Bir "*** KeyError: 0" alırsınız. Sanırım tek bir değer varken bunun "skaler" gibi olmakla ilgisi var.
Starman

Bugün itibariyle, bu sorguya sahip tüm karakterleri, ulaşmaya çalışırken hayal kırıklığına uğradığım 127 karakterli iki hücre döndüren df'ye döndürüyor. Kimseyi yardım ederse
avirr

12

Tüm dizeyi yazdırmanın başka bir kolay yolu values, veri çerçevesini çağırmaktır.

df = pd.DataFrame({'one' : ['one', 'two', 
      'This is very long string very long string very long string veryvery long string']})

print(df.values)

Çıktı olacak

[['one']
 ['two']
 ['This is very long string very long string very long string veryvery long string']]

4

Yapmak istediğin bu mu?

In [7]: x =  pd.DataFrame({'one' : ['one', 'two', 'This is very long string very long string very long string veryvery long string']})

In [8]: x
Out[8]: 
                                                 one
0                                                one
1                                                two
2  This is very long string very long string very...

In [9]: x['one'][2]
Out[9]: 'This is very long string very long string very long string veryvery long string'

4

Yazdırmadan önce kodunuza aşağıdaki satırı eklemeniz yeterlidir.

 pd.options.display.max_colwidth = 90  # set a value as your need

Diğer ek seçenekleri ayarlamak için aşağıdaki adımları uygulamanız yeterlidir,

  • Daha fazla sütun görüntülemek için pandas max_columns özelliği seçeneklerini aşağıdaki gibi değiştirebilirsiniz

    import pandas as pd
    pd.options.display.max_columns = 10

    (bu 10 sütunun görüntülenmesine izin verir, bunu ihtiyaç duyduğunuzda değiştirebilirsiniz)

  • Bunun gibi, daha fazla satır görüntülemek için aşağıdaki gibi görüntülemeniz gerektiğinden satır sayısını değiştirebilirsiniz.

    pd.options.display.max_rows = 999

    (bu, bir seferde 999 satır yazdırmaya izin verir)

bu iyi çalışmalı

Lütfen lütfen bakın doc pandalar için daha fazla seçenek / ayarlarını değiştirmek için


3

Tanımladığınız durumla sık sık başa çıkma .to_csv()şeklim , yöntemi kullanmak ve stdout'a yazmaktır:

import sys

df.to_csv(sys.stdout)

Güncelleme: Artık benzer efekt Noneyerine sadece kullanmak mümkün olmalı sys.stdout!

Bu, tüm dizeler dahil olmak üzere tüm veri çerçevesini dökmelidir. Dizinin yazdırılıp yazdırılmayacağı, vb. Sütun ayırıcıları yapılandırmak için to_csv parametrelerini kullanabilirsiniz. Gerçi düzgün bir şekilde oluşturmaktan daha az güzel olacaktır.

Bunu orijinal olarak Pandalar'daki bir veri çerçevesindeki tüm sütunlardan Çıktı verilerindeki biraz ilgili soruya yanıt olarak yayınladım.


2

Küçük bir yardımcı program işlevi oluşturdum, bu benim için iyi çalışıyor

def display_text_max_col_width(df, width):
    with pd.option_context('display.max_colwidth', width):
        print(df)

display_text_max_col_width(train_df["Description"], 800)

Kalıcı olarak herhangi bir seçenek belirlemeden, genişliğin uzunluğunu ihtiyacıma göre değiştirebilirim.


1

Jupyter not defteri kullanıyorsanız, pandalar veri çerçevesini HTML tablosu olarak da yazdırabilirsiniz, bu da tam dizeleri yazdırır.

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

Çıktı

    one
0   one
1   two
2   This is very long string very long string very long string veryvery long string
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.