OUJOOD.COM
info() : le bilan technique du DataFrame
df.info() affiche un résumé structurel complet : nombre de lignes, nom et type de chaque colonne, nombre de valeurs non nulles par colonne, et occupation mémoire totale. C'est la méthode à appeler en premier quand vous ne connaissez pas encore un jeu de données.
import pandas as pd
df = pd.read_csv("commandes.csv")
df.info()
Résultat typique :
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1200 entries, 0 to 1199 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 id_commande 1200 non-null int64 1 client 1200 non-null object 2 date_commande 1200 non-null object 3 montant 1187 non-null float64 4 statut 1200 non-null object 5 date_livraison 1043 non-null object dtypes: float64(1), int64(1), object(4) memory usage: 56.4+ KB
Ce résultat révèle immédiatement deux problèmes : la colonne montant a 13 valeurs manquantes (1187 au lieu de 1200), et date_livraison en a 157. Les colonnes de dates sont en object — elles devront être converties avant tout calcul temporel. Tout ça sans afficher une seule ligne de données.
Détecter les valeurs manquantes avec isnull()
info() montre le nombre de valeurs non nulles. Pour avoir directement le nombre de valeurs manquantes par colonne, combinez isnull() et sum() :
import pandas as pd
df = pd.read_csv("commandes.csv")
# Nombre de valeurs manquantes par colonne
print(df.isnull().sum())
# Pourcentage de valeurs manquantes par colonne
print((df.isnull().sum() / len(df) * 100).round(2))
Le pourcentage est souvent plus parlant que le nombre brut. 13 valeurs manquantes sur 1200 lignes, c'est 1 % — traitable. 157 valeurs manquantes sur 1200, c'est 13 % — ça mérite réflexion avant de décider si on remplit, on supprime ou on ignore ces lignes.
describe() : les statistiques descriptives
df.describe() calcule automatiquement les statistiques clés pour toutes les colonnes numériques : nombre de valeurs, moyenne, écart-type, minimum, quartiles (25 %, 50 %, 75 %) et maximum.
import pandas as pd
data = {
"âge": [23, 45, 31, 28, 67, 19, 52, 38, 44, 29],
"salaire": [1800, 3200, 2400, 2100, 4500, 1600, 3800, 2900, 3100, 2200],
"score": [72, 88, 65, 91, 78, 55, 83, 70, 87, 69]
}
df = pd.DataFrame(data)
print(df.describe())
Résultat :
âge salaire score count 10.000000 10.000000 10.000000 mean 37.600000 2760.000000 75.800000 std 14.640892 861.684705 11.390349 min 19.000000 1600.000000 55.000000 25% 28.250000 2125.000000 68.250000 50% 34.500000 2650.000000 75.000000 75% 44.750000 3275.000000 86.250000 max 67.000000 4500.000000 91.000000
La ligne 50% est la médiane — plus robuste que la moyenne face aux valeurs extrêmes. L'écart entre mean et 50% révèle un biais : si la moyenne est bien supérieure à la médiane, quelques valeurs élevées tirent la distribution vers le haut. L'écart entre min et 25%, ou entre 75% et max, peut signaler des valeurs aberrantes.
Étendre describe() aux colonnes texte
Par défaut, describe() ignore les colonnes de type object. Le paramètre include="all" les inclut, avec des statistiques adaptées : nombre de valeurs uniques, valeur la plus fréquente et sa fréquence.
import pandas as pd
df = pd.read_csv("commandes.csv")
# Inclure toutes les colonnes, y compris les textes
print(df.describe(include="all"))
# Uniquement les colonnes texte (object)
print(df.describe(include="object"))
# Nombre de valeurs uniques par colonne texte
print(df.select_dtypes("object").nunique())
Pour une colonne statut avec les valeurs "en cours", "livré", "annulé", describe(include="object") indique combien de valeurs uniques il y a et laquelle revient le plus souvent. C'est une façon rapide de vérifier qu'il n'y a pas de fautes de frappe ou de catégories non prévues dans vos données catégorielles.
Par carabde | Mis à jour le 26 avril 2026