Pandas en Python es una de las herramientas más utilizadas para trabajar con datos tabulares. Permite importar archivos, seleccionar columnas, filtrar filas, limpiar valores ausentes, agrupar información y exportar resultados mediante objetos llamados Series y DataFrame.
En esta guía aprenderás el flujo básico de Pandas desde la instalación hasta un pequeño análisis completo. La sección oficial Getting started de Pandas ofrece tutoriales introductorios, y la guía oficial de usuario documenta las operaciones avanzadas.
Instalar e importar Pandas
python -m pip install pandasimport pandas as pd
print(pd.__version__)Utiliza un entorno virtual para evitar conflictos entre proyectos. La guía de venv en Python explica el proceso.
Crear una Series
import pandas as pd
ventas = pd.Series(
[1200, 950, 1430],
index=["enero", "febrero", "marzo"],
name="ventas",
)
print(ventas)
print(ventas["febrero"])Una Series representa una colección unidimensional con etiquetas.
Crear un DataFrame
datos = {
"producto": ["Teclado", "Ratón", "Monitor"],
"cantidad": [4, 8, 2],
"precio": [45.0, 20.0, 210.0],
}
df = pd.DataFrame(datos)
print(df)Un DataFrame organiza columnas con nombres y filas indexadas. Los diccionarios son una forma frecuente de construirlo; consulta la guía de diccionarios en Python para repasar esta estructura.
Leer CSV y Excel
ventas_csv = pd.read_csv("ventas.csv")
ventas_excel = pd.read_excel(
"ventas.xlsx",
sheet_name="Datos",
)Para archivos CSV, revisa la guía de CSV en Python. Para seleccionar hojas, columnas y motores de Excel, consulta cómo importar Excel con Pandas.
Inspeccionar los datos
print(df.head())
print(df.tail())
print(df.shape)
print(df.columns)
print(df.dtypes)
print(df.info())
print(df.describe())Inspecciona siempre antes de limpiar. Los tipos inferidos pueden no coincidir con el significado real de una columna.
Seleccionar columnas
productos = df["producto"]
resumen = df[["producto", "precio"]]Seleccionar filas con loc e iloc
primera_fila = df.iloc[0]
primeras_dos = df.iloc[:2]
productos_caros = df.loc[
df["precio"] > 40,
["producto", "precio"],
]iloc usa posiciones enteras. loc usa etiquetas y condiciones.
Filtrar datos
filtro = (
(df["cantidad"] >= 3)
& (df["precio"] < 100)
)
seleccion = df[filtro]Usa &, | y ~ con condiciones entre paréntesis. Los operadores booleanos normales and y or no funcionan elemento por elemento en una Series.
Crear y modificar columnas
df["total"] = df["cantidad"] * df["precio"]
df["producto"] = df["producto"].str.strip().str.title()Las operaciones vectorizadas suelen ser más claras y rápidas que recorrer fila por fila.
Valores ausentes
print(df.isna().sum())
df["cantidad"] = df["cantidad"].fillna(0)
df = df.dropna(subset=["producto"])Antes de rellenar, define qué significa la ausencia. Cero, cadena vacía y dato desconocido no son equivalentes.
Convertir tipos
df["cantidad"] = pd.to_numeric(
df["cantidad"],
errors="coerce",
).astype("Int64")
df["fecha"] = pd.to_datetime(
df["fecha"],
errors="coerce",
)errors="coerce" convierte valores inválidos en ausentes, que después deben revisarse.
Agrupar y resumir
resumen = (
df.groupby("categoria", as_index=False)
.agg(
ventas_totales=("total", "sum"),
precio_medio=("precio", "mean"),
registros=("producto", "count"),
)
.sort_values("ventas_totales", ascending=False)
)La guía de análisis de datos con Pandas y NumPy amplía agrupaciones, limpieza y flujos completos.
Combinar DataFrames
ventas = pd.DataFrame({
"producto_id": [1, 2, 1],
"cantidad": [3, 2, 4],
})
productos = pd.DataFrame({
"producto_id": [1, 2],
"nombre": ["Teclado", "Ratón"],
})
resultado = ventas.merge(
productos,
on="producto_id",
how="left",
)Verifica siempre la unicidad de las claves. Un merge con duplicados inesperados puede multiplicar filas.
Ordenar y eliminar duplicados
df = df.sort_values(
["categoria", "precio"],
ascending=[True, False],
)
df = df.drop_duplicates(
subset=["producto", "fecha"],
keep="last",
)Exportar resultados
df.to_csv(
"ventas_limpias.csv",
index=False,
encoding="utf-8",
)
resumen.to_excel(
"resumen.xlsx",
index=False,
)Proyecto práctico
import pandas as pd
def crear_resumen(ruta_origen, ruta_destino):
df = pd.read_csv(ruta_origen)
requeridas = {
"producto",
"categoria",
"cantidad",
"precio",
}
faltantes = requeridas - set(df.columns)
if faltantes:
raise ValueError(
f"Faltan columnas: {sorted(faltantes)}"
)
df["cantidad"] = pd.to_numeric(
df["cantidad"],
errors="coerce",
)
df["precio"] = pd.to_numeric(
df["precio"],
errors="coerce",
)
df = df.dropna(
subset=["producto", "cantidad", "precio"]
)
df = df[
(df["cantidad"] >= 0)
& (df["precio"] >= 0)
].copy()
df["total"] = df["cantidad"] * df["precio"]
resumen = (
df.groupby("categoria", as_index=False)["total"]
.sum()
.sort_values("total", ascending=False)
)
resumen.to_csv(ruta_destino, index=False)
return resumenErrores frecuentes
- Modificar una vista sin usar
.copy(). - Confiar en tipos inferidos sin inspeccionarlos.
- Rellenar todos los ausentes con el mismo valor.
- Usar bucles fila por fila para operaciones vectorizables.
- Realizar un merge sin validar claves y cardinalidad.
- Cargar columnas innecesarias de archivos enormes.
- Sobrescribir el archivo original antes de revisar el resultado.
Conclusión
Pandas en Python ofrece un flujo consistente para importar, inspeccionar, limpiar, transformar, agrupar y exportar datos. Empieza verificando columnas y tipos, aplica reglas explícitas para valores ausentes y conserva una copia del origen. La productividad de Pandas aumenta cuando el proceso es reproducible y cada transformación puede explicarse.






