พิมพ์สตริงที่ยาวมากในดาต้าเฟรมของแพนด้า


116

ฉันกำลังดิ้นรนกับสิ่งที่ดูเหมือนง่ายมากฉันมีกรอบข้อมูลแพนด้าที่มีสตริงที่ยาวมาก

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

ตอนนี้เมื่อฉันพยายามพิมพ์แบบเดียวกันฉันไม่เห็นสตริงทั้งหมดฉันค่อนข้างเห็นเพียงบางส่วนของสตริง

ฉันลองทำตามตัวเลือกต่อไปนี้

  • โดยใช้ print(df.iloc[2])
  • โดยใช้ to_html
  • โดยใช้ to_string
  • หนึ่งในคำตอบ stackoverflow ที่แนะนำให้เพิ่มความกว้างของคอลัมน์โดยใช้ตัวเลือกการแสดงแพนด้าซึ่งก็ไม่ได้ผลเช่นกัน
  • ฉันยังไม่ได้รับว่าset_printoptionsจะช่วยฉันได้อย่างไร

ความคิดใด ๆ ที่ชื่นชม ดูธรรมดามาก แต่หาไม่ได้!

คำตอบ:


176

คุณสามารถใช้options.display.max_colwidthเพื่อระบุว่าคุณต้องการดูเพิ่มเติมในการแสดงค่าเริ่มต้น:

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

และแน่นอนหากคุณต้องการตรวจสอบค่าเดียวโดยการเข้าถึง (เป็นสเกลาร์ไม่ใช่แถวเหมือนdf.iloc[2]) คุณจะเห็นสตริงทั้งหมด:

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] - ไม่ทำงาน - ฉันจะพิมพ์แถวแรกและแถวที่สามและตัด (
Rocketq

มันใช้งานได้ถ้าคุณต้องการองค์ประกอบของแถวที่สามและคอลัมน์แรก หากคุณต้องการอย่างอื่นโปรดเปิดคำถามใหม่
Joris

ได้ผลขอบคุณ! ฉันมีรายการรหัสไปรษณีย์ใน 1 คอลัมน์และใช้เพื่อค้นหาคอลัมน์ขั้นต่ำและสูงสุดโดยใช้ฟังก์ชัน: df ['zipcodeMinMax'] = df.loc [:, ['zipcodeList']] ใช้ (createMinMaxZipcode, แกน = 1). ดังนั้นภายในฟังก์ชันฉันทำ to_string ในซีรีส์ (stringZipcodes = zipcodeList.to_string (header = False, index = False)) รายการรหัสไปรษณีย์ที่ยาวขึ้นส่งผลให้มีจุด 3 จุดต่อท้ายเช่น "1111 ... " อันที่จริงสิ่งนี้จะไม่เกิดขึ้นหากคุณเลือกค่าตามดัชนีและคอลัมน์ (เป็นสเกลาร์) คำถามของฉัน: ทำไมพฤติกรรมนี้? การตั้งค่าตัวเลือกการแสดงผลให้มีผลกับการใช้งานดูเหมือนจะแปลกสำหรับฉัน? ขอบคุณ!
Wouter

1
@ เราเตอร์หากคุณมีคำถามอื่นควรถามใหม่แทนที่จะแสดงความคิดเห็นที่นี่
joris

1
สิ่งนี้ใช้ไม่ได้กับสตริงที่ใหญ่กว่าเช่นย่อหน้าที่มีหลายบรรทัด
devssh

37

ใช้pd.set_option('display.max_colwidth', -1)สำหรับการแบ่งบรรทัดอัตโนมัติและเซลล์หลายบรรทัด

นี่เป็นแหล่งข้อมูลที่ยอดเยี่ยมในการใช้ jupyters แสดงกับแพนด้าให้เต็มที่


6
pd.set_option('display.max_colwidth', None)สำหรับเวอร์ชันที่ใหม่กว่า
cookiemonster

นี่คือคำตอบที่ดีที่สุด
clancy

17

อีกวิธีหนึ่งที่ค่อนข้างง่ายคือการเรียกใช้ฟังก์ชันรายการ:

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

ไม่คุ้มค่าที่จะพูดถึงนั่นไม่ดีที่จะคอนแวนต์เพื่อแสดงรายการคอลัมน์ทั้งหมด แต่สำหรับบรรทัดง่ายๆ - ทำไมไม่


1
หากคุณลดค่า df ของคุณตามเกณฑ์การค้นหาบางอย่างและอยู่ในบรรทัดเดียวจะไม่ได้ผล เป็นวิธีที่ง่ายที่สุดสำหรับการดีบักความต้องการอยู่ดีและฉันหวังว่ามันจะใช้งานได้ แต่ฉันไม่รู้ว่าทำไมมันถึงไม่ คุณจะได้รับ "*** KeyError: 0" ฉันเดาว่ามันต้องเป็นเหมือน "สเกลาร์" เมื่อมีค่าเพียงค่าเดียว
Starman

ณ วันนี้สิ่งนี้จะส่งคืนอักขระทั้งหมดที่มีแบบสอบถามไปยัง df ที่ส่งคืนเซลล์สองเซลล์ที่มีอักขระ 127 ตัวซึ่งฉันรู้สึกผิดหวังในการพยายามเข้าถึง หากสิ่งนั้นช่วยใครได้
avirr

12

อีกวิธีหนึ่งที่ง่ายกว่าในการพิมพ์สตริงทั้งหมดคือการเรียกvaluesใช้ดาต้าเฟรม

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

print(df.values)

ผลลัพธ์จะเป็น

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

4

นี่คือสิ่งที่คุณตั้งใจจะทำใช่ไหม

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

เพียงเพิ่มบรรทัดต่อไปนี้ในรหัสของคุณก่อนพิมพ์

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

คุณสามารถทำตามขั้นตอนต่อไปนี้เพื่อตั้งค่าตัวเลือกเพิ่มเติมอื่น ๆ

  • คุณสามารถเปลี่ยนตัวเลือกสำหรับคุณลักษณะแพนด้า max_columns ดังต่อไปนี้เพื่อแสดงคอลัมน์เพิ่มเติม

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

    (อนุญาตให้แสดง 10 คอลัมน์คุณสามารถเปลี่ยนแปลงได้ตามต้องการ)

  • เช่นเดียวกับที่คุณสามารถเปลี่ยนจำนวนแถวได้ตามที่คุณต้องการแสดงดังต่อไปนี้เพื่อแสดงแถวเพิ่มเติม

    pd.options.display.max_rows = 999

    (อนุญาตให้พิมพ์ครั้งละ 999 แถว)

สิ่งนี้ควรใช้งานได้ดี

โปรดดูเอกสารเพื่อเปลี่ยนตัวเลือก / การตั้งค่าเพิ่มเติมสำหรับหมีแพนด้า


3

วิธีที่ฉันมักจะจัดการกับสถานการณ์ที่คุณอธิบายคือใช้.to_csv()วิธีการและเขียนถึง stdout:

import sys

df.to_csv(sys.stdout)

อัปเดต: ตอนนี้ควรใช้Noneแทนไฟล์sys.stdoutฟเฟกต์ที่คล้ายกันได้แล้ว!

สิ่งนี้ควรถ่ายโอนข้อมูลทั้ง dataframe รวมทั้งสตริงทั้งหมด คุณสามารถใช้พารามิเตอร์ to_csv เพื่อกำหนดค่าตัวคั่นคอลัมน์ไม่ว่าจะพิมพ์ดัชนีหรือไม่ ฯลฯ ซึ่งจะไม่ค่อยสวยกว่าการแสดงผลอย่างถูกต้อง

ฉันโพสต์สิ่งนี้ในตอนแรกเพื่อตอบคำถามที่เกี่ยวข้องกับข้อมูลเอาต์พุตจากคอลัมน์ทั้งหมดในดาต้าเฟรมในแพนด้า


2

ฉันได้สร้างฟังก์ชันยูทิลิตี้ขนาดเล็กซึ่งใช้ได้ดีสำหรับฉัน

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)

ฉันสามารถเปลี่ยนความยาวของความกว้างได้ตามความต้องการของฉันโดยไม่ต้องตั้งค่าตัวเลือกใด ๆ อย่างถาวร


1

หากคุณใช้สมุดบันทึก jupyter คุณยังสามารถพิมพ์แพนด้าดาต้าเฟรมเป็นตาราง HTML ซึ่งจะพิมพ์สตริงแบบเต็ม

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

เอาต์พุต

    one
0   one
1   two
2   This is very long string very long string very long string veryvery long string
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.