Comment afficher les informations complètes (non tronquées) du cadre de données en html lors de la conversion du cadre de données pandas en html?

214

J'ai converti une trame de données pandas en une sortie html en utilisant le DataFrame.to_html fonction. Lorsque j'enregistre cela dans un fichier html distinct, le fichier affiche une sortie tronquée.

Par exemple, dans ma colonne TEXT,

df.head(1) montrera

Le film a été un excellent effort ...

au lieu de

Le film a été un excellent effort pour déconstruire les sentiments sociaux complexes qui ont prévalu pendant cette période.

Ce rendu est correct dans le cas d'un format convivial pour un cadre de données pandas massif, mais j'ai besoin d'un fichier html qui montrera les données tabulaires complètes contenues dans le cadre de données, c'est-à-dire quelque chose qui montrera le dernier élément de texte plutôt que le ancien extrait de texte.

Comment pourrais-je afficher les données textuelles complètes et non tronquées pour chaque élément de ma colonne TEXT dans la version html des informations? J'imagine que la table html devrait afficher de longues cellules pour afficher les données complètes, mais pour autant que je comprends, seuls les paramètres de largeur de colonne peuvent être passés dans la DataFrame.to_htmlfonction.

Amy
la source

Réponses:

427

Définissez l' display.max_colwidthoption sur -1:

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

set_option docs

Par exemple, dans iPython, nous voyons que les informations sont tronquées à 50 caractères. Tout ce qui dépasse est ellipsé:

entrez la description de l'image ici

Si vous définissez l' display.max_colwidthoption, les informations s'affichent entièrement:

entrez la description de l'image ici

behzad.nouri
la source
12
Selon les documents, vous devez le définir comme Nonesignifiant illimité.
kynan
21
La réponse est correcte, c'est-à-dire qu'elle ne doit pas être définie sur None. Sinon, obtiendra une ValueError: Value must have type '<class 'int'>'erreur.
xpt
C'est ce dont je parle!
Ivan
2
La max_columnsréponse a fonctionné pour moi, qui utilise Nonecomme deuxième argument de set_option.
kilojoules
10
Si vous souhaitez que ces options d'affichage s'appliquent une seule fois, et non de manière permanente, vous pouvez également utiliser le gestionnaire de contexte en tant que tel:with pd.option_context('display.max_colwidth', -1): display(df)
SA
115
pd.set_option('display.max_columns', None)  

id (deuxième argument) peut afficher complètement les colonnes.

user7579768
la source
Grand petit côté, le nombre de colonnes était tronqué pour moi, comme représenté par et des points de suspension (...) près du milieu de ma table. Merci!
four43
4
Cela a fonctionné pour moi et pas l'autre réponse. J'utilise Python 3.6
Durga Swaroop
1
Cela n'a pas fonctionné pour moi sur Python 2.7, mais la première réponse de @ behzad.nouri l'a fait.
r3robertson
Cela devrait être la réponse acceptée. La réponse d'acceptation actuelle avec option max_colwidthpeut résoudre le problème tronqué causé par un champ contenant des valeurs trop longues. Cependant, je pense que les problèmes tronqués pour la plupart des gens sont en fait trop de colonnes. Donc, ce max_columnsdevrait être celui qui est accepté.
Christopher
@Christopher, OP a demandé la largeur d'une colonne, beaucoup viennent ici pour les deux, donc la réponse de Karl est plus pertinente pour eux.
Alexei Martianov
87

Alors que pd.set_option('display.max_columns', None)définit le nombre de colonnes maximum affichées, l'optionpd.set_option('display.max_colwidth', -1) définit la largeur maximale de chaque champ unique.

Pour mes besoins, j'ai écrit une petite fonction d'aide pour imprimer entièrement d'énormes trames de données sans affecter le reste du code, il reformate également les nombres flottants et définit la largeur d'affichage virtuel. Vous pouvez l'adopter pour vos cas d'utilisation.

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')
Karl Adler
la source
remplacez -1 par "Aucun" dans la ligne au-dessus de l'impression (x) pour éviter l'avertissement de dépréciation
Mark Zhukovsky
1

Pour ceux qui cherchent à le faire en un rien de temps. Je ne pouvais pas trouver une option similaire dans dask mais si je le fais simplement dans le même cahier pour les pandas, cela fonctionne aussi pour 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)
Prabhat
la source
0

Le code suivant entraîne l'erreur ci-dessous:

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

FutureWarning: la transmission d'un entier négatif est déconseillée dans la version 1.0 et ne sera plus prise en charge dans la future version. Utilisez plutôt None pour ne pas limiter la largeur de colonne.

Utilisez plutôt:

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

Cela accomplit la tâche et est conforme aux versions de pandas suivant la version 1.0.

Patrick
la source