Jak wyświetlić pełne (nie obcięte) informacje o ramce danych w html podczas konwertowania z pandy na ramkę?


213

Za pomocą tej DataFrame.to_htmlfunkcji przekonwertowałem ramkę danych pandy na wyjście HTML . Kiedy zapisuję to w osobnym pliku HTML, plik ma obcięte dane wyjściowe.

Na przykład w mojej kolumnie TEKST

df.head(1) pokaże

Film był doskonałym wysiłkiem ...

zamiast

Film stanowił doskonały wysiłek w dekonstrukcji złożonych nastrojów społecznych panujących w tym okresie.

To renderowanie jest dobre w przypadku przyjaznego dla ekranu formatu ogromnej ramki danych pand, ale potrzebuję pliku HTML, który pokaże pełne dane tabelaryczne zawarte w ramce danych, to znaczy coś, co pokaże ostatni element tekstowy, a nie poprzedni fragment tekstu.

Jak mogę wyświetlić pełne, nie obcięte dane tekstowe dla każdego elementu w mojej kolumnie TEKST w html wersji informacji? Wyobrażam sobie, że tabela html musiałaby wyświetlać długie komórki, aby pokazać pełne dane, ale o ile rozumiem, do DataFrame.to_htmlfunkcji można przekazać tylko parametry szerokości kolumny .

Odpowiedzi:


426

Ustaw display.max_colwidthopcję -1:

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

set_option dokumenty

Na przykład w iPython widzimy, że informacje są obcięte do 50 znaków. Wszystko, co jest w nadmiarze, jest elipsowane:

wprowadź opis zdjęcia tutaj

Jeśli ustawisz tę display.max_colwidthopcję, informacje będą wyświetlane w pełni:

wprowadź opis zdjęcia tutaj


10
Według dokumentów powinieneś ustawić to Nonejako nieograniczone.
kynan

21
Odpowiedź jest prawidłowa, tzn. Nie należy jej ustawiać na None. W przeciwnym razie pojawi się ValueError: Value must have type '<class 'int'>'błąd.
xpt.

O tym właśnie mówię!
Ivan

2
max_columnsOdpowiedź pracował dla mnie, który wykorzystuje Nonejako drugi argument set_option.
kilodżule,

8
Jeśli chcesz, aby te opcje wyświetlania były stosowane tylko raz, a nie na stałe, możesz również użyć menedżera kontekstu jako takiego:with pd.option_context('display.max_colwidth', -1): display(df)
SA

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

id (drugi argument) może w pełni pokazać kolumny.


Nie licząc tego, liczba kolumn została dla mnie obcięta, co reprezentuje symbol i elipsa (...) w pobliżu środka mojego stołu. Dzięki!
four43

4
To zadziałało dla mnie, a nie dla innej odpowiedzi. Używam Python 3.6
Durga Swaroop

1
Nie działało to dla mnie w Pythonie 2.7, ale pierwsza odpowiedź autorstwa @ behzad.nouri zadziałała.
r3robertson,

To powinna być zaakceptowana odpowiedź. Bieżąca odpowiedź akceptacji z opcją max_colwidthmoże rozwiązać problem obcięcia spowodowany przez pole o zbyt długich wartościach. Myślę jednak, że problem obcięcia dla większości ludzi to w rzeczywistości zbyt wiele kolumn. To max_columnspowinien być zaakceptowany.
Christopher

@Christopher, OP zapytał o szerokość jednej kolumny, wielu przychodzi tutaj po obie, więc odpowiedź Karla jest dla nich bardziej odpowiednia.
Aleksiej Martianow

87

Chociaż pd.set_option('display.max_columns', None)ustawia liczbę pokazanych maksymalnych kolumn, opcja pd.set_option('display.max_colwidth', -1)ustawia maksymalną szerokość każdego pojedynczego pola.

Dla moich celów napisałem małą funkcję pomocniczą, która w pełni drukuje ogromne ramki danych bez wpływu na resztę kodu, formatuje też liczby zmiennoprzecinkowe i ustawia wirtualną szerokość wyświetlania. Możesz go dostosować do swoich przypadków użycia.

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')

zmień -1 na „Brak” w wierszu nad drukiem (x), aby uniknąć ostrzeżenia o wycofaniu
Mark Zhukovsky

1

Dla tych, którzy chcą to zrobić w dask. Nie mogłem znaleźć podobnej opcji w dask, ale jeśli po prostu zrobię to w tym samym notatniku dla pand, to również działa dla 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

Poniższy kod powoduje błąd poniżej:

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

FutureWarning: Przekazywanie ujemnej liczby całkowitej jest przestarzałe w wersji 1.0 i nie będzie obsługiwane w przyszłej wersji. Zamiast tego użyj opcji Brak, aby nie ograniczać szerokości kolumny.

Zamiast tego użyj:

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

Wykonuje to zadanie i jest zgodne z wersjami pand następujących po wersji 1.0.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.