Cetak string yang sangat panjang seluruhnya dalam pandas dataframe


116

Saya berjuang dengan hal yang tampaknya sangat sederhana, saya memiliki bingkai data panda yang berisi string yang sangat panjang.

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

Sekarang ketika saya mencoba untuk mencetak yang sama, saya tidak melihat string lengkap saya lebih suka hanya melihat sebagian dari string.

Saya mencoba opsi berikut

  • menggunakan print(df.iloc[2])
  • menggunakan to_html
  • menggunakan to_string
  • Salah satu jawaban stackoverflow menyarankan untuk menambah lebar kolom dengan menggunakan opsi tampilan panda, itu juga tidak berhasil.
  • Saya juga tidak mengerti bagaimana set_printoptionsakan membantu saya.

Setiap ide dihargai. Terlihat sangat sederhana, tetapi tidak bisa mendapatkannya!

Jawaban:


176

Anda dapat menggunakan options.display.max_colwidthuntuk menentukan Anda ingin melihat lebih banyak dalam representasi default:

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

Dan memang, jika Anda hanya ingin memeriksa satu nilai, dengan mengaksesnya (sebagai skalar, bukan sebagai baris df.iloc[2]) Anda juga akan melihat string lengkap:

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] - tidak berfungsi - Saya akan mencetak baris pertama dan ketiga dan
memotong

Itu berhasil, jika Anda menginginkan elemen baris ketiga dan kolom pertama. Jika Anda menginginkan yang lain, silakan buka pertanyaan baru.
joris

Berhasil, terima kasih! Saya memiliki daftar kode pos dalam 1 kolom dan menggunakan apply untuk menemukan min dan max kolom bijaksana menggunakan fungsi: df ['zipcodeMinMax'] = df.loc [:, ['zipcodeList']]. Apply (createMinMaxZipcode, axis = 1). Jadi di dalam fungsi yang saya lakukan to_string pada seri (stringZipcodes = zipcodeList.to_string (header = False, index = False)). Daftar kode pos yang lebih panjang menghasilkan 3 titik di bagian akhir, misalnya "1111 ...". Memang ini tidak terjadi jika Anda memilih nilai berdasarkan indeks dan kolom (sebagai skalar). Pertanyaan saya: mengapa perilaku ini? Menyetel opsi tampilan untuk memengaruhi penerapan tampak aneh bagi saya? Terima kasih!
Wouter

1
@Wouter jika Anda memiliki pertanyaan yang berbeda, lebih baik bertanya yang baru daripada berkomentar di sini
joris

1
Ini tidak berfungsi untuk string yang lebih besar seperti paragraf dengan banyak baris.
devssh

37

Gunakan pd.set_option('display.max_colwidth', -1)untuk pemisah baris otomatis dan sel multi-baris.

Ini adalah sumber yang bagus tentang cara menggunakan tampilan jupyters dengan panda secara maksimal.


6
pd.set_option('display.max_colwidth', None)untuk versi yang lebih baru
cookiemonster

Ini adalah jawaban terbaik
clancy

17

Pendekatan lain yang cukup sederhana adalah memanggil fungsi daftar:

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

Tidak layak untuk disebutkan, itu tidak baik untuk biara untuk membuat daftar seluruh kolom, tetapi untuk satu baris sederhana - mengapa tidak


1
Jika Anda telah mengurangi df Anda berdasarkan beberapa kriteria pencarian, dan itu menjadi satu baris, ini tidak akan berhasil. Ini adalah cara termudah, untuk keperluan debugging, dan saya berharap ini akan berhasil, tetapi saya tidak tahu mengapa tidak. Anda mendapatkan "*** KeyError: 0". Saya menduga itu ada hubungannya dengan menjadi seperti "skalar" ketika hanya ada satu nilai.
Starman

Pada hari ini, ini mengembalikan semua karakter dengan kueri ke df yang mengembalikan dua sel dengan 127 karakter, yang membuat saya frustrasi saat mencoba mendapatkannya. Jika itu membantu siapa pun
avirr

12

Cara lain yang lebih mudah untuk mencetak seluruh string adalah dengan memanggil valuesdataframe.

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

print(df.values)

Outputnya akan

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

4

Apakah ini yang ingin Anda lakukan?

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

Cukup tambahkan baris berikut ke kode Anda sebelum mencetak.

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

Anda cukup melakukan langkah-langkah berikut untuk mengatur opsi tambahan lainnya,

  • Anda dapat mengubah opsi fitur pandas max_columns sebagai berikut untuk menampilkan lebih banyak kolom

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

    (ini memungkinkan 10 kolom untuk ditampilkan, Anda dapat mengubahnya sesuai kebutuhan)

  • Seperti itu Anda dapat mengubah jumlah baris yang Anda butuhkan untuk menampilkan sebagai berikut untuk menampilkan lebih banyak baris

    pd.options.display.max_rows = 999

    (ini memungkinkan untuk mencetak 999 baris sekaligus)

ini seharusnya bekerja dengan baik

Silakan lihat dokumen untuk mengubah lebih banyak opsi / pengaturan untuk panda


3

Cara saya sering menangani situasi yang Anda gambarkan adalah dengan menggunakan .to_csv()metode dan menulis ke stdout:

import sys

df.to_csv(sys.stdout)

Pembaruan: sekarang seharusnya mungkin untuk hanya digunakan Nonedaripada sys.stdoutdengan efek yang serupa!

Ini harus membuang seluruh kerangka data, termasuk keseluruhan string apa pun. Anda dapat menggunakan parameter to_csv untuk mengkonfigurasi pemisah kolom, apakah indeks akan dicetak, dll. Namun, ini akan kurang cantik daripada merendernya dengan benar.

Saya memposting ini awalnya sebagai jawaban atas pertanyaan yang agak terkait di Output data dari semua kolom dalam kerangka data di panda


2

Saya telah membuat fungsi utilitas kecil, ini berfungsi dengan baik untuk saya

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)

Saya dapat mengubah panjang lebar sesuai kebutuhan saya, tanpa menyetel opsi apa pun secara permanen.


1

Jika Anda menggunakan notebook jupyter, Anda juga dapat mencetak pandas dataframe sebagai tabel HTML, yang akan mencetak string lengkap.

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

Keluaran

    one
0   one
1   two
2   This is very long string very long string very long string veryvery long string
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.