Como exibir informações completas (não truncadas) do quadro de dados em html ao converter do pandas dataframe para html?


213

Eu converti um dataframe de pandas em uma saída html usando a DataFrame.to_htmlfunção Quando eu salvo isso em um arquivo html separado, o arquivo mostra a saída truncada.

Por exemplo, na minha coluna TEXT,

df.head(1) mostrará

O filme foi um excelente esforço ...

ao invés de

O filme foi um excelente esforço para desconstruir os complexos sentimentos sociais que predominaram nesse período.

Essa versão está correta no caso de um formato compatível com a tela de um grande dataframe de pandas, mas preciso de um arquivo html que mostre dados tabulares completos contidos no dataframe, ou seja, algo que mostre o último elemento de texto em vez do antigo snippet de texto.

Como eu seria capaz de mostrar os dados de texto completos e não truncados para cada elemento na minha coluna TEXT na versão html das informações? Eu imaginaria que a tabela html teria que exibir células longas para mostrar os dados completos, mas, pelo que entendi, apenas parâmetros de largura de coluna podem ser passados ​​para a DataFrame.to_htmlfunção.

Respostas:


422

Defina a display.max_colwidthopção para -1:

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

set_option docs

Por exemplo, no iPython, vemos que as informações são truncadas para 50 caracteres. Qualquer coisa em excesso é elipsizada:

insira a descrição da imagem aqui

Se você definir a display.max_colwidthopção, as informações serão exibidas totalmente:

insira a descrição da imagem aqui


10
De acordo com os documentos, você deve defini-lo Nonecomo ilimitado.
Kynan #

21
A resposta está correta, ou seja, não deve ser definida como None. Caso contrário, ocorrerá um ValueError: Value must have type '<class 'int'>'erro.
xpt 4/08/16

É disso que estou falando!
Ivan Ivan

2
A max_columnsresposta funcionou para mim, que usa Nonecomo segundo argumento de set_option.
quilojoules

8
Se você deseja que essas opções de exibição sejam aplicadas apenas uma vez, e não permanentemente, também é possível usar o gerenciador de contexto como tal:with pd.option_context('display.max_colwidth', -1): display(df)
SA

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

id (segundo argumento) pode mostrar completamente as colunas.


Muito pouco à parte, o número de colunas estava sendo truncado para mim, representado por e reticências (...) perto do meio da minha mesa. Obrigado!
four43

4
Isso funcionou para mim e não a outra resposta. Eu estou usando Python 3.6
Durga Swaroop

1
Isso não funcionou para mim no Python 2.7, mas a primeira resposta de @ behzad.nouri funcionou.
R3robertson

Essa deve ser a resposta aceita. A atual opção de resposta com opção max_colwidthpode resolver o problema truncado causado por um campo com valores muito longos. No entanto, acho que os problemas truncados para a maioria das pessoas são realmente muitas colunas. Portanto, este max_columnsdeve ser o aceito.
Christopher

@ Christopher, OP perguntou sobre a largura de uma coluna, muitos vêm aqui para ambos, então a resposta de Karl é mais relevante para eles.
Alexei Martianov

87

Enquanto pd.set_option('display.max_columns', None)define o número máximo de colunas mostradas, a opção pd.set_option('display.max_colwidth', -1)define a largura máxima de cada campo único.

Para meus propósitos, escrevi uma pequena função auxiliar para imprimir totalmente grandes quadros de dados sem afetar o restante do código, também reformata os números flutuantes e define a largura da exibição virtual. Você pode adotá-lo para seus casos de uso.

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

altere -1 para "Nenhum" na linha acima da impressão (x) para evitar aviso de reprovação
Mark Zhukovsky

1

Para aqueles que procuram fazer isso em dask. Não consegui encontrar uma opção semelhante no dask, mas se eu simplesmente fizer isso no mesmo notebook para pandas, também funcionará para o 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

O código a seguir resulta no erro abaixo:

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

FutureWarning: Passar um número inteiro negativo está obsoleto na versão 1.0 e não será suportado na versão futura. Em vez disso, use None para não limitar a largura da coluna.

Em vez disso, use:

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

Isso realiza a tarefa e está em conformidade com as versões do pandas após a versão 1.0.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.