Làm cách nào để hiển thị thông tin khung dữ liệu đầy đủ (không bị cắt cụt) trong html khi chuyển đổi từ khung dữ liệu gấu trúc sang html?


213

Tôi đã chuyển đổi một khung dữ liệu gấu trúc thành đầu ra html bằng cách sử dụng DataFrame.to_htmlhàm. Khi tôi lưu tệp này vào một tệp html riêng, tệp sẽ hiển thị đầu ra bị cắt ngắn.

Ví dụ: trong cột văn bản của tôi,

df.head(1) sẽ hiển thị

Bộ phim là một nỗ lực tuyệt vời ...

thay vì

Bộ phim là một nỗ lực tuyệt vời trong việc giải mã những tình cảm xã hội phức tạp đang thịnh hành trong giai đoạn này.

Hiển thị này là tốt trong trường hợp định dạng thân thiện với màn hình của khung dữ liệu gấu trúc lớn, nhưng tôi cần một tệp html sẽ hiển thị dữ liệu bảng đầy đủ có trong khung dữ liệu, nghĩa là, thứ gì đó sẽ hiển thị phần tử văn bản sau thay vì đoạn văn bản cũ.

Làm cách nào tôi có thể hiển thị dữ liệu văn bản hoàn chỉnh, không bị cắt cụt cho từng thành phần trong cột văn bản của tôi trong phiên bản html của thông tin? Tôi sẽ tưởng tượng rằng bảng html sẽ phải hiển thị các ô dài để hiển thị dữ liệu hoàn chỉnh, nhưng theo tôi hiểu, chỉ các tham số độ rộng cột có thể được truyền vào DataFrame.to_htmlhàm.

Câu trả lời:


422

Đặt display.max_colwidthtùy chọn thành -1:

pd.set_option('display.max_colwidth', -1)

set_option tài liệu

Ví dụ: trong iPython, chúng tôi thấy rằng thông tin được cắt ngắn thành 50 ký tự. Bất cứ điều gì vượt quá được elip hóa:

nhập mô tả hình ảnh ở đây

Nếu bạn đặt display.max_colwidthtùy chọn, thông tin sẽ được hiển thị đầy đủ:

nhập mô tả hình ảnh ở đây


10
Theo các tài liệu bạn nên đặt nó Nonecó nghĩa là không giới hạn.
kynan

21
Câu trả lời là chính xác, tức là không nên đặt thành None. Nếu không, sẽ nhận được ValueError: Value must have type '<class 'int'>'lỗi.
xpt

Đó là những gì tôi đang nói về!
Ivan

2
Câu max_columnstrả lời làm việc cho tôi, trong đó sử dụng Nonenhư là đối số thứ hai của set_option.
kilojoules

8
Nếu bạn muốn các tùy chọn hiển thị này chỉ áp dụng một lần và không vĩnh viễn, bạn cũng có thể sử dụng trình quản lý bối cảnh như sau:with pd.option_context('display.max_colwidth', -1): display(df)
SA

114
pd.set_option('display.max_columns', None)  

id (đối số thứ hai) có thể hiển thị đầy đủ các cột.


Bỏ qua một bên, số lượng cột bị cắt ngắn cho tôi, như được biểu thị bằng và dấu chấm lửng (...) ở gần giữa bàn của tôi. Cảm ơn!
bốn43

4
Điều này làm việc cho tôi và không phải là câu trả lời khác. Tôi đang sử dụng Python 3.6
Durga Swaroop

1
Điều này không hiệu quả với tôi trên Python 2.7, nhưng câu trả lời đầu tiên của @ Behzad.nouri đã làm.
r3robertson

Đây phải là câu trả lời được chấp nhận. Câu trả lời chấp nhận hiện tại với tùy chọn max_colwidthcó thể giải quyết vấn đề cắt ngắn do trường gây ra có giá trị quá dài. Tuy nhiên, tôi nghĩ rằng vấn đề cắt ngắn đối với hầu hết mọi người thực sự là quá nhiều cột. Vì vậy, đây max_columnsnên là người được chấp nhận.
Christopher

@Christopher, OP đã hỏi về chiều rộng của một cột, nhiều người đến đây vì cả hai câu trả lời của Karl có liên quan hơn với họ.
Alexei Martianov

87

Trong khi pd.set_option('display.max_columns', None)đặt số lượng cột tối đa được hiển thị, tùy chọn pd.set_option('display.max_colwidth', -1)sẽ đặt độ rộng tối đa của từng trường.

Với mục đích của mình, tôi đã viết một hàm trợ giúp nhỏ để in đầy đủ các khung dữ liệu khổng lồ mà không ảnh hưởng đến phần còn lại của mã, nó cũng định dạng lại các số float và đặt chiều rộng hiển thị ảo. Bạn có thể áp dụng nó cho các trường hợp sử dụng của bạn.

def print_full(x):
    pd.set_option('display.max_rows', len(x))
    pd.set_option('display.max_columns', None)
    pd.set_option('display.width', 2000)
    pd.set_option('display.float_format', '{:20,.2f}'.format)
    pd.set_option('display.max_colwidth', None)
    print(x)
    pd.reset_option('display.max_rows')
    pd.reset_option('display.max_columns')
    pd.reset_option('display.width')
    pd.reset_option('display.float_format')
    pd.reset_option('display.max_colwidth')

thay đổi -1 thành "Không" trong dòng trên in (x) để tránh cảnh báo
khấu hao

1

Đối với những người tìm kiếm để làm điều này trong dask. Tôi không thể tìm thấy một tùy chọn tương tự trong dask nhưng nếu tôi chỉ đơn giản làm điều này trong cùng một máy tính xách tay cho gấu trúc thì nó cũng hoạt động cho dask.

import pandas as pd
import dask.dataframe as dd
pd.set_option('display.max_colwidth', -1) # This will set the no truncate for pandas as well as for dask. Not sure how it does for dask though. but it works

train_data = dd.read_csv('./data/train.csv')    
train_data.head(5)

0

Các mã sau đây dẫn đến lỗi dưới đây:

pd.set_option('display.max_colwidth', -1)

FutureWarning: Truyền một số nguyên âm không được dùng trong phiên bản 1.0 và sẽ không được hỗ trợ trong phiên bản tương lai. Thay vào đó, sử dụng Không để không giới hạn chiều rộng cột.

Thay vào đó, sử dụng:

pd.set_option('display.max_colwidth', None)

Điều này hoàn thành nhiệm vụ và tuân thủ các phiên bản gấu trúc theo phiên bản 1.0.

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.