1. Accueil
  2. Calcul de moyenne
  3. Moyenne en Python

Calculer une moyenne en Python

En Python, la moyenne d’une liste se calcule avec sum(notes) / len(notes), ou avec statistics.mean(notes) du module standard, sans rien installer. Pour une moyenne pondérée, utilisez statistics.fmean(notes, coefs) (Python 3.11 et plus) ou numpy.average(notes, weights=coefs) ; dans tous les cas, prévoyez le cas de la liste vide.

Mis à jour le · Rédaction moyenne.org · Nos sources

Trois façons d’écrire la même moyenne

Sans module
sum(n) / len(n)
Module statistics
statistics.mean(n)
NumPy
np.mean(n)

Source : documentation officielle de Python (module statistics) et de NumPy. Résultats vérifiés avec Python 3.12.

La méthode de base : sum et len

La moyenne arithmétique est la somme des valeurs divisée par leur nombre. En Python, sum() donne la somme et len() le nombre d’éléments.

notes = [12, 15, 9, 14, 11]
moyenne = sum(notes) / len(notes)
print(moyenne)            # 12.2
print(round(moyenne, 1))  # 12.2

Calcul : (12 + 15 + 9 + 14 + 11) ÷ 5 = 61 ÷ 5 = 12,2. L’opérateur / renvoie toujours un nombre décimal (float) en Python 3, même quand la division tombe juste. Python affiche un point décimal, pas une virgule.

Le module statistics : mean, median, fmean

Le module statistics est livré avec Python. Il ajoute des contrôles et d’autres indicateurs :

import statistics as st

notes = [12, 15, 9, 14, 11]
st.mean(notes)    # 12.2
st.median(notes)  # 12
st.pstdev(notes)  # écart-type de la série
st.stdev(notes)   # écart-type d'échantillon

La médiane vaut 12 : c’est la valeur du milieu de la série triée 9, 11, 12, 14, 15 (la différence entre les deux indicateurs est détaillée dans calculer une moyenne). Le module fournit aussi geometric_mean et harmonic_mean.

statistics.mean calcule de façon exacte avec des fractions, alors que sum()/len() accumule les petites erreurs d’arrondi des nombres décimaux : sum([0.1, 0.1, 0.1]) / 3 renvoie 0.10000000000000002, statistics.mean renvoie 0.1. fmean est plus rapide et renvoie toujours un float.

Moyenne pondérée en Python

Le principe est celui de SOMMEPROD sur Excel : somme des produits valeur × coefficient, divisée par la somme des coefficients.

notes = [12, 15, 9, 14, 11]
coefs = [1, 2, 2, 3, 1]

# Sans module
total = sum(n * c for n, c in zip(notes, coefs))
moy = total / sum(coefs)   # 113 / 9

# Python 3.11 et plus
import statistics as st
moy = st.fmean(notes, coefs)

# NumPy
import numpy as np
moy = np.average(notes, weights=coefs)

print(round(moy, 2))  # 12.56

Vérification

12×1 + 15×2 + 9×2 + 14×3 + 11×1 = 12 + 30 + 18 + 42 + 11 = 113. Somme des coefficients : 9. 113 ÷ 9 = 12,555… soit 12,56 arrondi au centième.

Attention à np.mean(notes, weights=…) : seule np.average accepte des poids. Et avec zip, si les deux listes n’ont pas la même longueur, les éléments en trop sont ignorés sans erreur ; ajoutez strict=True (Python 3.10 et plus) pour lever une erreur.

Gérer les listes vides et les valeurs manquantes

Comportement des méthodes face à une liste vide
MéthodeListe vide []
sum(n) / len(n)ZeroDivisionError
statistics.mean(n)StatisticsError
numpy.mean(n)nan, avec un avertissement RuntimeWarning
pandas Series.mean()nan
def moyenne(valeurs):
    valeurs = [v for v in valeurs
               if v is not None]
    if not valeurs:
        return None
    return sum(valeurs) / len(valeurs)

Cette fonction ignore les valeurs absentes (None) et renvoie None plutôt que de planter. Avec pandas, les valeurs manquantes (NaN) sont ignorées par défaut : la moyenne de [12, NaN, 9] vaut 10,5.

Moyenne par groupe et moyenne conditionnelle

L’équivalent de MOYENNE.SI s’écrit avec une liste filtrée, ou avec groupby en pandas pour un tableau complet.

# Moyenne des notes d'au moins 10
admis = [n for n in notes if n >= 10]
sum(admis) / len(admis)   # 13.0

# Avec pandas : moyenne par matière
import pandas as pd
df = pd.read_csv("notes.csv")
df.groupby("matiere")["note"].mean()

Les notes ≥ 10 de la liste sont 12, 15, 14 et 11 : (12 + 15 + 14 + 11) ÷ 4 = 13.

Python, tableur ou calculatrice ?

Python devient intéressant au-delà de quelques centaines de lignes, pour automatiser un traitement répété ou combiner plusieurs fichiers. Pour un bulletin ou un petit tableau, Excel ou Google Sheets suffisent. La plupart des calculatrices graphiques autorisées au lycée intègrent d’ailleurs Python : les deux premiers exemples de cette page y fonctionnent tels quels, sans NumPy.

Questions fréquentes

Comment arrondir une moyenne à deux décimales ?

round(moyenne, 2) renvoie un nombre ; f"{moyenne:.2f}" renvoie un texte toujours affiché avec deux décimales. Pour l’affichage à la française, ajoutez .replace(".", ",").

Comment calculer la moyenne d’une colonne d’un fichier CSV ?

Avec pandas : pd.read_csv("fichier.csv")["colonne"].mean(). Sans pandas, lisez le fichier avec le module csv, convertissez chaque valeur avec float() puis appliquez sum()/len().

Quelle différence entre mean et fmean ?

mean conserve le type des données et calcule de façon exacte ; fmean convertit en float, va plus vite et accepte des poids depuis Python 3.11.

Comment calculer une moyenne mobile ?

Avec pandas : df["valeur"].rolling(7).mean() donne la moyenne des 7 dernières valeurs à chaque ligne.

Sources

  1. Python Software Foundation, « statistics — Mathematical statistics functions », documentation de Python 3. docs.python.org
  2. NumPy, « numpy.average », documentation de référence. numpy.org
  3. pandas, « pandas.Series.mean », documentation de référence. pandas.pydata.org