Series y DataFrames de pandas
pandas añade ejes etiquetados a los datos de columnas: una Series es una columna tipada; un DataFrame es una tabla de Series alineadas que comparten un índice.
Busca en todas las páginas de la documentación
pandas añade ejes etiquetados a los datos de columnas: una Series es una columna tipada; un DataFrame es una tabla de Series alineadas que comparten un índice.
Tarjeta de referencia rápida - lista para copiar y pegar.
import pandas as pd
df = pd.DataFrame(
{"region": ["East", "West"], "revenue": [120, 340]},
index=pd.Index(["a", "b"], name="row"),
)
east = df.loc[df["region"] == "East", "revenue"]
subset = df.iloc[0:1, [0, 1]]Cuándo recurrir a esto:
import pandas as pd
orders = pd.DataFrame(
{
"order_id": [101, 102, 103, 104],
"region": pd.Categorical(["East", "West", "East", "West"]),
"revenue": [120.0, 340.0, None, 210.0],
"ordered_at": pd.to_datetime(
["2025-01-01", "2025-01-02", "2025-01-03", "2025-01-04"], utc=True
),
}
).set_index("order_id")
# Selección basada en etiquetas
east = orders.loc[orders["region"] == "East", ["region", "revenue"]]
# Cabecera basada en posición
head = orders.iloc[:2]
# Añadir columna calculada de forma segura
orders = orders.copy()
orders["revenue_filled"] = orders["revenue"].fillna(orders["revenue"].median())
# Reducción de Series
monthly_total = orders["revenue_filled"].sum()
print(east)
print("monthly_total:", monthly_total)Lo que esto demuestra:
.loc con subconjunto de columnas.copy() antes de la asignación para evitar SettingWithCopyWarning.loc incluye ambos extremos para las etiquetas; .iloc es semiabierto como los slices de Python.dtype (string[pyarrow]) cambia el comportamiento de la memoria y los valores faltantes.| Objetivo | API |
|---|---|
| Filtrar filas | df.loc[mask] |
| Elegir columnas | df[["a", "b"]] |
| Escalar por etiqueta | df.loc[row, "col"] |
| Escalar por posición | df.iloc[i, j] |
| Parámetro | Tipo | Descripción |
|---|---|---|
index | Similar a Index | Etiquetas de fila; por defecto es RangeIndex |
columns | list[str] | Nombres de columna para DataFrame |
dtype | str/np.dtype | Fuerza el tipo de columna en la construcción |
df[df["x"] > 0]["y"] = 1 activa SettingWithCopyWarning. Solución: df.loc[df["x"] > 0, "y"] = 1..loc["a"] devuelve múltiples filas; el acceso escalar falla. Solución: reset_index() o forzar claves únicas aguas arriba.object por defecto usan mucha RAM. Solución: df["col"] = df["col"].astype("string[pyarrow]") en pandas 2.2+.Int64 anulable cuando sea posible NA.pd.to_datetime(..., utc=True) en todas partes al ingerir.| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Polars DataFrame | Escaneos perezosos, datos muy grandes, tipado estricto | El equipo ya está estandarizado en los modismos de pandas |
| PyArrow Table | Intercambio de memoria cero entre sistemas | Necesitas indexación interactiva rica |
| SQL vía DuckDB | Los datos ya están en tablas de almacén | Transformaciones pequeñas en memoria |
| Arrays estructurados de NumPy | Registros numéricos de esquema fijo | Tipos de columna heterogéneos |
groupby cuando necesitas la clave del grupo como una columna..loc.df["col"] selecciona una Series de una columna.df.loc[rows, cols] es una selección 2D basada en etiquetas con reglas de alineación.inplace=True (desaconsejado).filter de Polars o lecturas por fragmentos.import pandas as pd
df = pd.read_csv("big.csv", usecols=["region", "revenue"])s.name aparece cuando la Series se convierte en una columna de DataFrame.pd.Series(..., name="revenue").import pandas as pd
df.columns.duplicated().any()df["x"] devuelva múltiples columnas.pd.options.mode.copy_on_write = True, las operaciones encadenadas posponen las copias hasta la escritura..loc para mayor claridad.df = df.reset_index()df.rename_axis("order_id").reset_index() para nombrar el índice anterior.dtype o pd.to_numeric(errors="coerce").sample = df.sample(n=100, random_state=42)Versiones de la Pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.
Revisado por Chris St. John·Última actualización: 16 jul 2026