statistics.mean(datos) devuelve la media aritmética calculada de forma exacta y respeta el tipo de los datos (int, float, Decimal, Fraction). statistics.fmean(datos) convierte todo a float, es más rápido y, desde Python 3.11, acepta pesos con weights=. Ambas están en la biblioteca estándar: solo necesitas import statistics.
Sintaxis
import statistics as st
st.mean(datos) # media exacta, conserva el tipo
st.fmean(datos) # media en float, más rápida
st.fmean(datos, weights=pesos) # media ponderada (Python 3.11 o posterior)
datos puede ser una lista, una tupla o cualquier iterable, incluido un generador. mean no tiene parámetro de pesos: si lo necesitas en una versión anterior a la 3.11, calcula sum(x * w for x, w in zip(datos, pesos)) / sum(pesos).
mean frente a fmean
statistics.mean | statistics.fmean | |
|---|---|---|
| Tipo del resultado | El de los datos si es exacto: mean([1, 2, 3]) → 2 | Siempre float: fmean([1, 2, 3]) → 2.0 |
Decimal y Fraction | Los respeta y no pierde precisión | Los convierte a float |
| Pesos | No | weights= desde Python 3.11 |
| Disponible desde | Python 3.4 | Python 3.8 |
| Velocidad | Más lenta: suma con fracciones exactas | Mucho más rápida en listas largas |
Paso a paso
- Importa el módulo:
import statistics as st. - Decide el tipo de dato. Para dinero con centavos exactos usa
Decimal("12.30"); para mediciones,float. - Llama a
st.mean(datos)si importa la exactitud, o ast.fmean(datos)si importa la velocidad o necesitas pesos. - Atrapa
st.StatisticsErrorsi la lista puede llegar vacía.
Ejemplos resueltos
Ejemplo 1: el mismo promedio con distinta precisión
import statistics as st
print(st.mean([0.1, 0.2, 0.4]))
print(st.fmean([0.1, 0.2, 0.4]))
print(sum([0.1, 0.2, 0.4]) / 3)
0.23333333333333334
0.23333333333333336
0.23333333333333336
mean suma los valores convirtiéndolos a fracciones exactas y redondea una sola vez al final, por eso su resultado es el float más cercano al valor real (0.2333…). fmean y sum()/len() acumulan el error de cada suma en coma flotante. La diferencia aparece en el decimal 17: no importa para mostrar una calificación, pero sí cuando comparas resultados con ==.
Ejemplo 2: dinero con Decimal y fracciones
from decimal import Decimal
from fractions import Fraction
print(st.mean([Decimal("0.1"), Decimal("0.2"), Decimal("0.4")]))
print(st.mean([Fraction(1, 3), Fraction(1, 6)]))
0.2333333333333333333333333333
1/4
Con Decimal el resultado sigue siendo Decimal, con la precisión del contexto decimal (28 dígitos por omisión). Con Fraction el promedio de 1/3 y 1/6 es exactamente 1/4, sin decimales periódicos.
Ejemplo 3: promedio ponderado con fmean
Un curso pondera tareas al 30 %, examen al 50 % y proyecto al 20 %. Las notas son 8, 9 y 6:
print(st.fmean([8, 9, 6], weights=[0.3, 0.5, 0.2]))
print(st.fmean([9.0, 7.5, 8.0], weights=[8, 6, 4]))
8.1
8.277777777777779
En el primer caso los pesos suman 1, así que 8 × 0.3 + 9 × 0.5 + 6 × 0.2 = 8.1. En el segundo los pesos son créditos (8, 6 y 4): fmean divide entre la suma de los pesos, 18, sin que tengas que normalizarlos. Puedes comprobar ambos con la calculadora de promedio ponderado.
Errores comunes
StatisticsError: mean requires at least one data point. La lista está vacía. Confmeanel mensaje esfmean requires at least one data point.TypeError: don't know how to coerce Decimal and float. MezclasteDecimalyfloaten la misma lista. Convierte todo a uno de los dos tipos; paraDecimal, crea los valores desde texto (Decimal("1.5")), no desdefloat.TypeError: can't convert type 'str' to numerator/denominator. Pasaste una cadena (st.mean("123")) o una lista con textos. Convierte confloat()oint()antes.fmean() got an unexpected keyword argument 'weights'. Tu Python es anterior a la 3.11. Revisa la versión conpython --versiono usa la fórmula conzip.- Esperar un
floaty recibir unint.mean([2, 4])devuelve3, no3.0. Si otra parte del código haceresultado.is_integer()o formatea con:.2f, no hay problema; si serializas a JSON y esperas decimales, usafmean.
Para la mediana, la moda y las medias geométrica y armónica, el mismo módulo ofrece median, mode, geometric_mean y harmonic_mean, explicadas en las páginas de mediana, moda y media geométrica y armónica.
Fuentes
- Python Software Foundation, documentación del módulo statistics. statistics.mean, statistics.fmean (parámetro weights desde Python 3.11). Consultado el 11 de noviembre de 2026.