Print(dataframe) mais pas dataframe.head()?

Dans le cours de présentation des dataframes, il est demandé de :

(d) Dans un DataFrame nommé transactions_client_268819, stocker toutes les transactions dont l’identifiant du client est 268819.

Je sélectionne les lignes qui correspondent, je peux faire print(transactions_client_268819) et avec l’énoncé :

À l’aide d’une boucle for sur la colonne 'total_amt', calculer et afficher le montant total des transactions du client 268819.
J’ai un résultat.

Mais lorsque je fais : transactions_client_268819.head(5) , rien ne s’affiche, pas même un message d’erreur… Pourquoi ?

Si, j’ai bien compris, la méthode head affiche les lignes uniquement si c’est le dernier affichage des lignes de codes.

Bonjour Christine,

En effet, la méthode head affiche uniquement si c’est la dernière ligne de code.

La fonction print en revanche fonctionnera quel que soit son positionnement. Cependant l’affichage avec print est moins « joli ».

Il est donc possible d’utiliser display(df) (ou display(df.head())) qui (comme pour print) fonctionnera quel que soit son positionnement dans le code, et offrira un meilleur affichage que la fonction print.

Bonne journée
Antoine

Merci pour cette réponse plus juste et plus complète…

La méthode head(), en effet, n’est pas une fonction d’affichage, il renvoie une DataFrame et positionné sur la dernière ligne de code, cela affiche son contenu.

Dans les cellules des Notebooks Jupiter, ça marche avec n’importe quelle variable…

Oui la fonction .head(x) ne fait que retourner les x dernières lignes d’un dataframe et dans un notebook jupyter par exemple, le dernier retour est affiché, et si c’est un dataframe, il est formaté.

Cela peut poser problème lorsque l’on veut faire plusieurs affichages formatés dans une même cellule, ou si l’on veut faire quelque chose après avoir affiché notre dataframe avec .head(5) (usuellement)

C’est pourquoi la fonction display est très intéressante par rapport à la fonction print. Elle permet d’afficher et de formatter le dataframe.
(Je souspçonne justement jupyter d’utiliser cette fonction implicitement si la dernière ligne retournée est un dataframe.)

Le code suivant affichera 2 dataframes formattés proprement :

from IPython.display import display

display(df)
foo = 0
display(df.head(5))
bar = 1

Il existe d’autres libraries pour afficher des dataframes, par exemple qgrid, qui permet de filtrer notre dataframe interractivement après affichage, à la manière d’excel.

import qgrid as qg

qg.show_grid(df)

Noter que l’installation de qgrid via conda installe les dépendances et active les extensions jupyter. Avec pip il faudra surement activer les extensions jupyter à la main.