Promedio de una columna en pandas

Por el equipo de promedio.net · Actualizado el

En pandas, el promedio de una columna se obtiene con df["columna"].mean(). Para el promedio de cada columna numérica usa df.mean(numeric_only=True) y para el de cada fila, df[columnas].mean(axis=1). Los valores faltantes (NaN) se ignoran por omisión; si la columna está guardada como texto, conviértela antes con pd.to_numeric.

Sintaxis

df["col"].mean()                         # una columna → un número
df.mean(numeric_only=True)               # cada columna numérica → Serie
df[["a", "b", "c"]].mean(axis=1)         # cada fila → Serie
df.loc[condicion, "col"].mean()          # solo las filas que cumplen
df["col"].mean(skipna=False)             # nan si falta algún dato

Paso a paso

  1. Carga los datos: df = pd.read_csv("archivo.csv"). Si el archivo usa coma decimal, agrega decimal="," (y sep=";" si las columnas se separan con punto y coma, como en los CSV que exporta Excel en España).
  2. Revisa los tipos con df.dtypes: las columnas a promediar deben ser int64 o float64, no object.
  3. Elige la dirección: una columna, todas las columnas o cada fila.
  4. Guarda el resultado en una variable o en una columna nueva y redondea con .round(2) al final.

Ejemplos resueltos

Ejemplo 1: promedio de cada parcial y de cada alumno

import pandas as pd

df = pd.DataFrame({
    "alumno": ["Ana", "Luis", "Sofía", "Diego"],
    "parcial1": [8.5, 6.0, 9.0, 7.5],
    "parcial2": [9.0, 7.0, 8.5, 6.5],
    "parcial3": [7.5, 8.0, 10.0, 7.0],
})
print(df["parcial1"].mean())
print(df.mean(numeric_only=True))
7.75
parcial1    7.750
parcial2    7.750
parcial3    8.125
dtype: float64

Para el promedio de cada alumno, promedia a lo ancho de las tres columnas con axis=1 y guárdalo como columna nueva:

df["promedio"] = df[["parcial1", "parcial2", "parcial3"]].mean(axis=1).round(2)
print(df)
  alumno  parcial1  parcial2  parcial3  promedio
0    Ana       8.5       9.0       7.5      8.33
1   Luis       6.0       7.0       8.0      7.00
2  Sofía       9.0       8.5      10.0      9.17
3  Diego       7.5       6.5       7.0      7.00

Elegir las columnas explícitamente evita que una columna de texto (el nombre) o una de identificadores numéricos (la matrícula) entre al promedio.

Ejemplo 2: promedio con condición

Con el mismo df, la media del segundo parcial solo de quienes sacaron más de 7 en el primero, y la lista de alumnos con promedio de 8 o más:

print(df.loc[df["parcial1"] > 7, "parcial2"].mean())
print(df[df["promedio"] >= 8]["alumno"].tolist())
8.0
['Ana', 'Sofía']

Ana, Sofía y Diego superan el 7 en el primer parcial; sus segundos parciales (9.0, 8.5 y 6.5) promedian 8.0. Es el equivalente de PROMEDIO.SI en Excel.

Ejemplo 3: columna numérica leída como texto

s = pd.Series(["8", "9", "7"])
print(pd.to_numeric(s).mean())
8.0

Sin la conversión, s.mean() lanza TypeError: Could not convert string '897' to numeric: pandas intentó sumar los textos, los concatenó en «897» y luego no pudo dividir. Si algunos valores no son convertibles, usa pd.to_numeric(s, errors="coerce").

Errores comunes

Para promediar por categoría (región, grupo, mes) en lugar de por columna, mira promedio por grupo con groupby. Si quieres la versión escolar del cálculo, sin código, está en cómo sacar el promedio de calificaciones.

Fuentes

  1. pandas, DataFrame.mean. Parámetros axis, skipna y numeric_only. Consultado el 11 de noviembre de 2026.