La forma directa de calcular la mediana en Python es statistics.median(datos): ordena los valores y devuelve el central, o el promedio de los dos centrales si la cantidad es par. No hace falta ordenar la lista antes. Con arreglos de NumPy usa np.median(arr) y con pandas serie.median(), que además ignora los valores faltantes.
Sintaxis
import statistics as st
st.median(datos) # par: promedio de los dos centrales
st.median_low(datos) # par: el menor de los dos centrales
st.median_high(datos) # par: el mayor de los dos centrales
import numpy as np
np.median(arreglo, axis=None)
serie.median() # pandas, ignora NaN por omisión
Paso a paso
- Reúne los valores en una lista o arreglo. El orden no importa.
- Quita los valores faltantes (
NoneoNaN) antes de usarstatistics.median. - Si la cantidad es par, decide si aceptas un valor intermedio que no está en los datos (
median) o necesitas uno real (median_lowomedian_high). - Llama a la función y, si la comparas con el promedio, calcula los dos para ver cuánto pesan los extremos.
Ejemplos resueltos
Ejemplo 1: cantidad impar y cantidad par
import statistics as st
print(st.median([7, 2, 9, 4, 5]))
print(st.median([7, 2, 9, 4]))
print(st.median_low([7, 2, 9, 4]), st.median_high([7, 2, 9, 4]))
5
5.5
4 7
Con cinco valores, ordenados quedan 2, 4, 5, 7, 9 y el central es 5. Con cuatro (2, 4, 7, 9) los centrales son 4 y 7: median devuelve su promedio, 5.5, mientras que median_low y median_high devuelven 4 y 7, que sí están en los datos. Estas dos variantes sirven cuando los datos son categorías ordenadas o tallas, donde 5.5 no tiene sentido.
Ejemplo 2: sueldos con un valor extremo
sueldos = [9500, 11200, 10800, 12500, 98000]
print(st.mean(sueldos), st.median(sueldos))
28400 11200
Un solo sueldo de 98,000 eleva el promedio a 28,400, una cifra que no describe a nadie del grupo. La mediana, 11,200, sigue en el centro de los datos. Por eso las estadísticas de ingresos suelen reportar la mediana además del promedio.
Ejemplo 3: mediana por columnas con NumPy
import numpy as np
b = np.array([[1, 2],
[3, 4]])
print(np.median(b, axis=0))
[2. 3.]
Con axis=0 obtienes la mediana de cada columna; con axis=1, la de cada fila; sin axis, la de todos los elementos juntos.
Cuidado con los NaN
statistics.median no detecta los NaN y el resultado depende de dónde estén, porque NaN no se puede ordenar:
nan = float("nan")
print(st.median([3, nan, 1, 2]))
print(st.median([nan, 3, 1, 2]))
nan
1.5
Los mismos cuatro números dan dos resultados distintos, y ninguno es fiable. Filtra antes con [x for x in datos if x == x] (un NaN nunca es igual a sí mismo) o usa np.nanmedian, o serie.median() en pandas, que los omite. np.median sin el prefijo nan devuelve nan si hay alguno. Ver más en ignorar NaN al promediar.
Errores comunes
StatisticsError: no median for empty data. La lista está vacía; revísala antes de llamar a la función.- Ordenar a mano y tomar
datos[len(datos) // 2]. Solo funciona con cantidad impar. Con cantidad par devuelve el central superior, que esmedian_high, no la mediana. - Mezclar textos y números.
medianacepta cadenas si todas son cadenas (st.median(["b", "a", "c"])devuelve'b'), pero con una mezcla lanzaTypeErroral ordenar. - Confundir
median_groupedconmedian.median_groupedinterpola dentro de intervalos de clase, para datos agrupados; con datos sueltos casi nunca es lo que buscas.
Para comprobar a mano, la calculadora de mediana muestra los datos ordenados y cuál es el valor central. Si quieres la teoría, la página de media, mediana y moda explica cuándo conviene cada una.
Fuentes
- Python Software Foundation, documentación del módulo statistics. median, median_low, median_high, median_grouped. Consultado el 11 de noviembre de 2026.
- NumPy, numpy.median. Parámetro axis y comportamiento con NaN. Consultado el 11 de noviembre de 2026.