15 tips Python avec pandas pour la Data (partie 1)

  • par

Petite liste d’astuces en Python (avec pandas et Jupyter entre autres) appliquées à de la Data Analyse et ainsi gagner en productivité.

Parser fichier HTML en DataFrame

Avec pandas il est possible de parser un fichier HTML en DataFrame avec read_html() et dans le sens inverse avec to_html() de créer un HTML à partir d’un DataFrame :

parser avec pandas en Python

Parser en Markdown

Dans le même ordre idée, pandas dispose d’une méthode pour transformer un DataFrame en Markdown. Utile pour les README notamment !

Recap d’un dataset

describe() permet de se familiariser avec le dataset (voir le max, min, moyenne, nb, etc). Mais ça ne fonctionne PAS pour avec un timestamp ou les colonnes avec un symbole. Pour prendre en compte toutes les colonnes il faut ajouter l’argument (include=’all’)

Simplifier l’accès à une colonne d’un dataset

Le renommage de colonne dans pandas permet de retirer les espaces pour ensuite accéder à la colonne via un point. Pour ce faire, on peut renommer via rename() ou via un dict pour renommer toutes les colonnes d’un coup. Moi je supprime l’espace avec la méthode replace() :

Réduire espace utilisé d’un DataFrame

Un autre tips, pour réduire l’espace mémoire utilisé par un DataFrame : réduire le type de la colonne. Par exemple, si on a du int64, en général on peut descendre d’un cran sans risques :

df['col'] = df['col'].astype(np.int16)

Précision nombres à virgule

Avec pandas, on peut préciser le nombre de chiffres après la virgule qu’on souhaite afficher dans pandas via :

pd.set_options(‘display.precision’,3)

Extraire une partie d’un Dataset

Lorsqu’on souhaite extraire un sous ensemble d’un dataset trop gros, il existe en la fonction sample() pour ça :

Pour extraire une partie d’un dataset avec .sample(), le param frac prend une valeur entre 0 et 1 pour préciser la proportion du sample qu’on souhaite extraire du dataset.

Par exemple : frac=0.2 retourne un sample de 0.2*taille du dataset

Et .reset_index(drop=True) pour reset les index :

Cacher les warnings

Pour chacher les Warnings en Python :

import warnings warnings.filterwarnings(action=‘ignore’) 

Mais attention à son utilisation.

Ajouter une colonne à un DataFrame

Avec pandas il y a 2 méthodes pour ajouter une colonne à un DataFrame :

  1. en déclarant une nouvelle liste
  2. en utilisant insert()

Conversion .ipynb vers .py

Avec Jupytext on peut convertir un fichier format Jupiter notebook (.ipynb) en format python (.py) avec : jupytext —to py <file-name>.ipynb

Source : https://github.com/mwouts/jupytext

Tout afficher sur Jupyter

Comment afficher toutes les sorties dans Jupyter et pas seulement la dernière ? avec :

from IPython.core.interactiveshell

import InteractiveShell InteractiveShell.ast_node_interactivity = « all »

Pep8

Éviter les : import *

Préférer un import par ligne.

DataFrame pour tester

Créer un DataFrame pour tester avec makeDataFrame() ou makeMissingDataframe() ou makeTimeDataFrame() ou makeMixedDataFrame()

Les gros nombres en Python

En Python utilisez les underscores pour gagner en visibilité avec les gros nombres :

CSV trop lourd ?

Un CSV est trop lourd en mémoire ? Skiprows permet de spécifier le nombre de lignes à sauter lors de la lecture.

La fonction apply()

apply() est l’une des fonctions les plus utilisées parce qu’elle applique la fonction sur chaque ligne ou colonne. axis=0 pour appliquer sur chaque colonne et axis=1 pour chaque ligne.

Nombre de colonnes à afficher

Pour montrer plus de colonnes/lignes dans pandas :

import pandas as pd 
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)

Copier cellule Jupyter

On peut copier une cellule d’un autre fichier en pressant cmd+v deux fois. Avec juste cmd+v il y a un warning.

Sets vs Lists en Python

Pour des opérations basiques (comme : « element in list »), préférez les Sets aux Lists. Vous gagnerez en performance.

Pour les Sets on est sur du constant O(n) tandis que pour une liste, on est sur du linéaire O(n)

Info()

Sur Jupyter, utiliser info() pour voir l’utilisation de la mémoire par le DataFrame. Et memory_usage() pour chaque colonne.

Initialiser un dict en Python

Pour des questions de perf, utilisez

defaultdict(int) 

pour init un dict plutôt que juste :

mdict = {}

Debugger de Jupyter

Dans Jupiter, utilisez la commande %debug dans une nouvelle cellule pour ouvrir un debugger interactif. Il montre la position où l’exception a été levée , ce qui permet d’examiner le cide à ce moment (le contenu d’une variable par exemple).

Les commandes magiques de Jupyter

Dans Jupyter, il existe des commandes dites magiques pour gagner du temps. Elles sont accessibles via : %lsmagic Les plus utilisées en général sont : %pwd, %cd, %ls et %who pour lister l’ensemble des variables.

print() vs display()

print() vs display() : display() permet de soigner l’affichage :

Affichage d’un graphe sous Jupyter

Lors de la création d’un graphe avec pandas, mettre un point virgule pour ne plus afficher <matplotlib.axes._subplots.AxesSubplot at 0x11bb8ec90>

Tab vs Space en Python ?

Tab vs Space ? #Python Préférez les Spaces ! Utiliser des Tab seulement s’il y en a déjà dans le programme. Ne surtout pas mélanger les deux.

La commande whos sur Jupyter

La commande %whos est géniale sur un notebook jupyter. Elle permet d’afficher l’état (type, valeur) de l’ensemble des variables.

Obtenir la documentation d’une fonction

En appelant une méthode avec un point d’interrogation devant, on peut obtenir la doc

Changer le langage dans Jupyter

Dans jupyter on peut changer le langage avec : %%bash ou %%HTML ou %%perl, etc.