Curso
Si tienes un DataFrame y quieres acceder o seleccionar unas pocas filas/columnas concretas de ese DataFrame, puedes utilizar corchetes u otros métodos avanzados como loc y iloc.
Seleccionar columnas con corchetes
Vamos a suponer quieres seleccionar la columna country del DataFrame brics. Para ello, escribirás brics y a continuación la etiqueta de la columna dentro de los corchetes.
Seleccionar una columna
country capital area population
BR Brazil Brasilia 8.516 200.40
RU Russia Moscow 17.100 143.50
IN India New Dehli 3.286 1252.00
CH China Beijing 9.597 1357.00
SA South Africa Pretoria 1.221 52.98
brics["country"]
BR Brazil
RU Russia
IN India
CH China
SA South Africa
Name: country, dtype: object
Comprobar el tipo de objeto
Comprobemos el tipo del objeto que se devuelve con la función tipo.
type(brics["country"])
pandas.core.series.Series
Como podemos ver en el resultado anterior, ¡se trata de una serie pandas! Las series pueden considerarse como una matriz unidimensional que puede etiquetarse igual que un DataFrame.
Si quieres seleccionar datos y guardarlos en un DataFrame, tendrás que utilizar corchetes dobles:
brics[["country"]]
BR Brazil
RU Russia
IN India
CH China
SA South Africa
Si comprobamos el tipo de esta salida, ¡es un DataFrame! Pero con una sola columna.
type(brics[["country"]])
pandas.core.frame.DataFrame
Seleccionar varias columnas
Puedes ampliar esta llamada para seleccionar dos columnas. Intentemos seleccionar country y capital.
brics[["country", "capital"]]
country capital
BR Brazil Brasilia
RU Russia Moscow
IN India New Dehli
CH China Beijing
SA South Africa Pretoria
Si te fijas bien, en realidad estás poniendo una lista con etiquetas de columnas dentro de otro conjunto de corchetes y acabas con un sub DataFrame que sólo contiene las columnas country y capital.
Seleccionar filas utilizando corchetes
Los corchetes pueden hacer algo más que seleccionar columnas. También puedes utilizarlos para obtener filas, u observaciones, de un DataFrame.
Ejemplo:
Sólo puedes seleccionar filas utilizando corchetes si especificas un corte, como 0:4. Además, aquí estás utilizando los índices enteros de las filas, ¡no las etiquetas de las filas!
Para obtener la segunda, tercera y cuarta filas de brics DataFrame, utilizamos el corte 1 a 4. Recuerda que el final del corte es exclusivo, y que el índice empieza en cero.
brics[1:4]
country capital area population
RU Russia Moscow 17.100 143.50
IN India New Dehli 3.286 1252.00
CH China Beijing 9.597 1357.00
Estos corchetes funcionan, pero sólo ofrecen una funcionalidad limitada. Lo ideal sería algo parecido a las matrices 2D Numpy, en las que también se utilizan corchetes. El índice, o corte, antes de la coma se refiere a las filas, y el corte después de la coma se refiere a las columnas.
Ejemplo de matriz 2D Numpy:
my_array[rows, columns]
Si quieres hacer algo parecido con pandas, tienes que mirar de utilizar las funciones loc y iloc.
loc: basado en etiquetasiloc: basado en la posición de los integer
loc Función
loc es una técnica para seleccionar partes de tus datos basándote en etiquetas. Veamos el DataFrame de brics y obtengamos las filas de Rusia.
Para ello, pondrás la etiqueta de interés entre corchetes después de loc.
Seleccionar filas
brics.loc["RU"]
country Russia
capital Moscow
area 17.1
population 143.5
Name: RU, dtype: object
Obtenemos una serie pandas que contiene toda la información de las filas; aunque, de forma inconveniente, se muestra en diferentes líneas. Para obtener un DataFrame, tenemos que poner la cadena RU en otro par de corchetes. También podemos seleccionar varias filas a la vez. Supón que quieres incluir también a India y China. Sólo tienes que añadir esas etiquetas de fila a la lista.
brics.loc[["RU", "IN", "CH"]]
country capital area population
RU Russia Moscow 17.100 143.50
IN India New Dehli 3.286 1252.00
CH China Beijing 9.597 1357.00
La diferencia entre utilizar un loc y los corchetes básicos es que puedes ampliar la selección con una coma y una especificación de las columnas de interés.
Seleccionar filas y columnas
Ampliemos la llamada anterior para incluir sólo las columnas country y capital. Añadimos una coma y enumeramos las etiquetas de las columnas que queremos conservar. Se devuelve la intersección.
brics.loc[["RU", "IN", "CH"], ["country", "capital"]]
country capital
RU Russia Moscow
IN India New Dehli
CH China Beijing
También puedes utilizar loc para seleccionar todas las filas pero sólo un número determinado de columnas. Simplemente sustituye la primera lista que especifica las etiquetas de las filas por dos puntos. Un trozo que va de principio a fin. Esta vez, recuperamos todas las filas pero sólo dos columnas.
Seleccionar todas las filas y columnas específicas
brics.loc[:, ["country", "capital"]]
country capital
BR Brazil Brasilia
RU Russia Moscow
IN India New Dehli
CH China Beijing
SA South Africa Pretoria
iloc Función
La función iloc te permite crear subconjuntos de pandas DataFrames en función de su posición o índice.
Seleccionar filas
Utilicemos los mismos datos y ejemplos similares que en loc. Empecemos por la fila de Rusia.
brics.iloc[[1]]
country capital area population
RU Russia Moscow 17.100 143.50
Para obtener las filas de Rusia, India y China. Ahora puedes utilizar una lista de índices 1, 2, 3.
brics.iloc[[1, 2, 3]]
country capital area population
RU Russia Moscow 17.100 143.50
IN India New Dehli 3.286 1252.00
CH China Beijing 9.597 1357.00
Seleccionar filas y columnas
De forma similar a loc, también podemos seleccionar tanto filas como columnas utilizando iloc. Aquí seleccionaremos las filas de Rusia, India y China y las columnas country y capital.
brics.iloc[[1, 2, 3], [0, 1]]
country capital
RU Russia Moscow
IN India New Dehli
CH China Beijing
Seleccionar todas las filas y columnas específicas
Por último, si quisieras seleccionar todas las filas pero quedarte sólo con las columnas country y capital, puedes hacerlo:
brics.loc[:, [0, 1]]
country capital
BR Brazil Brasilia
RU Russia Moscow
IN India New Dehli
CH China Beijing
SA South Africa Pretoria
loc y iloc son bastante similares. La única diferencia es cómo te refieres a columnas y filas.
Ejemplo interactivo sobre la selección de un subconjunto de datos
En el siguiente ejemplo, los datos de los coches se importan desde un archivo CSV como un DataFrame de Pandas. Para seleccionar sólo los cars_per_cap column de los coches, puedes utilizar:
cars['cars_per_cap']
cars[['cars_per_cap']]
La versión de corchetes simples da una Serie Pandas; la versión de corchetes dobles da un DataFrame Pandas.
- Utilizarás corchetes simples para imprimir la columna
countrydecarscomo una Serie Pandas. - A continuación, utiliza corchetes dobles para imprimir la columna
countrydecarscomo un Pandas DataFrame. - Por último, utiliza los corchetes dobles para imprimir un DataFrame con las columnas
countryydrives_rightdecars, en este orden.
# Import cars data
import pandas as pd
cars = pd.read_csv('cars.csv', index_col = 0)
# Print out country column as Pandas Series
print(cars['country'])
# Print out country column as Pandas DataFrame
print(cars[['country']])
# Print out DataFrame with country and drives_right columns
print(cars[['country', 'drives_right']])
Cuando ejecutamos el código anterior, se obtiene el siguiente resultado:
US United States
AUS Australia
JPN Japan
IN India
RU Russia
MOR Morocco
EG Egypt
Name: country, dtype: object
country
US United States
AUS Australia
JPN Japan
IN India
RU Russia
MOR Morocco
EG Egypt
country drives_right
US United States True
AUS Australia False
JPN Japan False
IN India False
RU Russia True
MOR Morocco True
EG Egypt True
Para saber más sobre los pandas, consulta este vídeo de nuestro curso Python Intermedio.
Este contenido ha sido extraído del curso de Python Intermedio de DataCamp, impartido por Hugo Bowne-Anderson.

