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
| Méthode | Liste 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
- Python Software Foundation, « statistics — Mathematical statistics functions », documentation de Python 3. docs.python.org
- NumPy, « numpy.average », documentation de référence. numpy.org
- pandas, « pandas.Series.mean », documentation de référence. pandas.pydata.org