HOWTO · Pandas
Cómo seleccionar varias columnas en un DataFrame de Pandas
Aprende a seleccionar varias columnas de un DataFrame de Pandas con corchetes, `.iloc` por posición y `.loc` por etiquetas. Compara la sintaxis y elige la opción adecuada para cada tarea.
En esta página
Para seleccionar varias columnas de un DataFrame de Pandas por nombre, pasa una lista de etiquetas de columna entre corchetes: df[["Name", "Salary"]]. Usa .iloc cuando conozcas las posiciones de las columnas y .loc cuando quieras seleccionar filas y columnas por sus etiquetas.
Uso de la sintaxis __getitem__
La selección con corchetes es la opción directa cuando conoces los nombres de las columnas. Los corchetes exteriores seleccionan elementos del DataFrame y la lista interior indica las etiquetas. Esta sección muestra la selección mediante __getitem__. Pandas devuelve las columnas solicitadas en el orden de esa lista, independientemente de su orden en el DataFrame original.
Este ejemplo usa un único DataFrame pequeño para comparar la selección por nombre, por posición y por etiqueta. Cada resultado incluye todas las filas y las columnas elegidas en el orden solicitado.
import pandas as pd
df = pd.DataFrame({
"Name": ["Alice", "Bob", "Charlie", "David"],
"Age": [24, 30, 22, 35],
"City": ["New York", "Los Angeles", "Chicago", "Houston"],
"Salary": [70000, 80000, 65000, 90000],
})
by_name = df[["Name", "Salary"]]
by_position = df.iloc[:, [0, 3]]
by_label = df.loc[:, ["City", "Age"]]
print("By name:")
print(by_name.to_dict("records"))
print("\nBy position:")
print(by_position.to_dict("records"))
print("\nBy label:")
print(by_label.to_dict("records"))
By name:
[{'Name': 'Alice', 'Salary': 70000}, {'Name': 'Bob', 'Salary': 80000}, {'Name': 'Charlie', 'Salary': 65000}, {'Name': 'David', 'Salary': 90000}]
By position:
[{'Name': 'Alice', 'Salary': 70000}, {'Name': 'Bob', 'Salary': 80000}, {'Name': 'Charlie', 'Salary': 65000}, {'Name': 'David', 'Salary': 90000}]
By label:
[{'City': 'New York', 'Age': 24}, {'City': 'Los Angeles', 'Age': 30}, {'City': 'Chicago', 'Age': 22}, {'City': 'Houston', 'Age': 35}]
La operación __getitem__ es la que se invoca al acceder a un DataFrame con corchetes; normalmente se escribe esta sintaxis legible en lugar de llamar directamente al método especial.
Uso de .iloc para seleccionar por posición
.iloc es el indexador de Pandas basado en posiciones enteras. En df.iloc[:, [0, 3]], los dos puntos antes de la coma seleccionan todas las filas, mientras que [0, 3] selecciona la primera y la cuarta columna. Las posiciones empiezan en cero, por lo que cambiar el orden de las columnas del DataFrame puede cambiar los datos que seleccionan esos números. Usa .iloc cuando la posición sea relevante o no estén disponibles las etiquetas.
Uso de .loc para seleccionar por etiquetas
.loc es el indexador basado en etiquetas. En df.loc[:, ["City", "Age"]], el selector de filas es : y el selector de columnas es una lista de etiquetas. Así se conserva el orden solicitado: primero City y después Age. También puedes combinar una condición de fila con una lista de columnas, como en la forma integrada df.loc[df["Age"] > 25, ["Name", "City"]], para conservar las filas que coincidan y devolver solo esas columnas. Usa .loc cuando la selección dependa de etiquetas o necesites elegir filas y columnas a la vez.
Conclusión
Usa df[["a", "b"]] para seleccionar varias columnas por nombre, .iloc para posiciones enteras y .loc para etiquetas con selección opcional de filas. Elige las etiquetas cuando los nombres de las columnas expresen lo que necesitas; elige las posiciones cuando la información relevante sea su orden.
Preguntas frecuentes
¿Cómo selecciono columnas por nombre? Pasa una lista de etiquetas entre los corchetes del DataFrame, por ejemplo, df[["column1", "column2"]].
¿Cuál es la diferencia entre .iloc y .loc? .iloc selecciona por posiciones enteras que empiezan en cero; .loc selecciona por etiquetas. Ambos aceptan selectores de filas y columnas separados por una coma.
¿Puedo seleccionar filas y columnas a la vez? Sí. Con .loc, escribe una etiqueta o condición de fila antes de la coma y las etiquetas de las columnas solicitadas después, por ejemplo, df.loc[df["Age"] > 25, ["Name", "City"]].
¿Qué sintaxis debería usar? Usa corchetes con una lista si conoces los nombres de las columnas, .iloc si conoces sus posiciones enteras y .loc si quieres seleccionar por etiquetas y quizá filtrar filas al mismo tiempo.
¿Y si necesito muchas columnas? Incluye los nombres deseados en una lista. Si las columnas forman un intervalo contiguo, .iloc permite usar un segmento; recuerda que un segmento de .iloc se detiene antes de la posición final. Para un conjunto no contiguo, proporciona una lista de posiciones o etiquetas.