In hoàn toàn chuỗi rất dài trong khung dữ liệu gấu trúc


116

Tôi đang đấu tranh với một việc tưởng chừng rất đơn giản, tôi có một khung dữ liệu gấu trúc chứa một chuỗi rất dài.

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

Bây giờ khi tôi cố gắng in giống nhau, tôi không thấy chuỗi đầy đủ mà tôi chỉ thấy một phần của chuỗi.

Tôi đã thử các tùy chọn sau

  • sử dụng print(df.iloc[2])
  • sử dụng to_html
  • sử dụng to_string
  • Một trong những câu trả lời ngăn xếp được đề xuất để tăng chiều rộng cột bằng cách sử dụng tùy chọn hiển thị gấu trúc, cách này cũng không hoạt động.
  • Tôi cũng không nhận được làm thế nào set_printoptionssẽ giúp tôi.

Bất kỳ ý tưởng được đánh giá cao. Nhìn rất đơn giản, nhưng không thể có được!

Câu trả lời:


176

Bạn có thể sử dụng options.display.max_colwidthđể chỉ định bạn muốn xem thêm trong biểu diễn mặc định:

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

Và thực sự, nếu bạn chỉ muốn kiểm tra một giá trị, bằng cách truy cập nó (dưới dạng vô hướng, không phải dưới dạng hàng df.iloc[2]), bạn cũng sẽ thấy chuỗi đầy đủ:

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] - không hoạt động - tôi sẽ in hàng đầu tiên và hàng thứ ba và cắt (
Rocketq

Nó hoạt động, nếu bạn muốn phần tử của hàng thứ ba và cột đầu tiên. Nếu bạn muốn điều gì khác, vui lòng mở một câu hỏi mới.
joris

Nó hoạt động, thx! Tôi có một danh sách các mã zip trong 1 cột và sử dụng áp dụng để tìm cột tối thiểu và cột tối đa một cách khôn ngoan bằng cách sử dụng hàm: df ['zipcodeMinMax'] = df.loc [:, ['zipcodeList']]. Apply (createMinMaxZipcode, axis = 1). Vì vậy, trong hàm tôi thực hiện to_string trên chuỗi (stringZipcodes = zipcodeList.to_string (header = False, index = False)). Danh sách mã zip dài hơn dẫn đến 3 dấu chấm ở cuối, ví dụ: "1111 ...". Thật vậy, điều này không xảy ra nếu bạn chọn các giá trị dựa trên chỉ mục và cột (dưới dạng vô hướng). Câu hỏi của tôi: tại sao hành vi này? Thiết lập các tùy chọn hiển thị để ảnh hưởng đến áp dụng có vẻ lạ đối với tôi? Cám ơn!
Wouter

1
@Wouter nếu bạn có một câu hỏi khác, tốt hơn nên hỏi một câu hỏi mới thay vì bình luận ở đây
joris

1
Điều này không hoạt động đối với một chuỗi lớn hơn như một đoạn văn có nhiều dòng.
devssh

37

Sử dụng pd.set_option('display.max_colwidth', -1)cho dấu ngắt dòng tự động và ô nhiều dòng.

Đây là một nguồn tài liệu tuyệt vời về cách sử dụng màn hình jupyters với gấu trúc một cách đầy đủ nhất.


6
pd.set_option('display.max_colwidth', None)cho các phiên bản mới hơn
cookiemonster

Đây là câu trả lời hay nhất
clancy

17

Một cách tiếp cận khá đơn giản khác là gọi hàm danh sách:

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

Không có gì đáng nói, điều đó không tốt nếu quy ước để liệt kê toàn bộ các cột, nhưng đối với một dòng đơn giản - tại sao không


1
Nếu bạn đã giảm df của mình dựa trên một số tiêu chí tìm kiếm và nó xuống đến một dòng duy nhất, điều này không hoạt động. Đó là cách đơn giản nhất, cho nhu cầu gỡ lỗi, và tôi ước nó sẽ hoạt động, nhưng tôi không biết tại sao nó không. Bạn nhận được một "*** KeyError: 0". Tôi đoán nó liên quan đến việc giống như một "vô hướng" khi chỉ có một giá trị.
Starman

Kể từ hôm nay, điều này trả về tất cả các ký tự có truy vấn vào df trả về hai ô có 127 ký tự, mà tôi đã rất thất vọng khi cố gắng lấy lại. Nếu điều đó có ích cho bất kỳ ai
avirr

12

Một cách khác dễ dàng hơn để in toàn bộ chuỗi là gọi valuestrên khung dữ liệu.

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

print(df.values)

Đầu ra sẽ là

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

4

Đây có phải là những gì bạn muốn làm?

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

Chỉ cần thêm dòng sau vào mã của bạn trước khi in.

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

Bạn chỉ cần thực hiện các bước sau để thiết lập các tùy chọn bổ sung khác,

  • Bạn có thể thay đổi các tùy chọn cho tính năng pandas max_columns như sau để hiển thị nhiều cột hơn

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

    (điều này cho phép 10 cột hiển thị, bạn có thể thay đổi tùy chọn này khi cần)

  • Như vậy, bạn có thể thay đổi số hàng khi bạn cần hiển thị như sau để hiển thị nhiều hàng hơn

    pd.options.display.max_rows = 999

    (điều này cho phép in 999 hàng cùng một lúc)

cái này sẽ hoạt động tốt

Vui lòng tham khảo tài liệu để thay đổi nhiều tùy chọn / cài đặt hơn cho gấu trúc


3

Cách tôi thường đối phó với tình huống bạn mô tả là sử dụng .to_csv()phương thức và viết vào stdout:

import sys

df.to_csv(sys.stdout)

Cập nhật: bây giờ có thể chỉ sử dụng Nonethay vì sys.stdoutvới hiệu ứng tương tự!

Điều này sẽ kết xuất toàn bộ khung dữ liệu, bao gồm toàn bộ chuỗi bất kỳ. Bạn có thể sử dụng các tham số to_csv để định cấu hình dấu phân tách cột, liệu chỉ mục có được in hay không, v.v. Tuy nhiên, nó sẽ kém đẹp hơn so với việc hiển thị nó đúng cách.

Tôi đã đăng điều này ban đầu để trả lời cho câu hỏi có phần liên quan tại Dữ liệu đầu ra từ tất cả các cột trong khung dữ liệu ở gấu trúc


2

Tôi đã tạo một chức năng tiện ích nhỏ, chức năng này hoạt động tốt đối với tôi

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)

Tôi có thể thay đổi chiều dài chiều rộng theo yêu cầu của mình mà không cần đặt bất kỳ tùy chọn nào vĩnh viễn.


1

Nếu đang sử dụng sổ ghi chép jupyter, bạn cũng có thể in khung dữ liệu gấu trúc dưới dạng bảng HTML, bảng này sẽ in các chuỗi đầy đủ.

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

Đầu ra

    one
0   one
1   two
2   This is very long string very long string very long string veryvery long string
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.