Selección de datos#

Una operación fundamental cuando trabajamos con datos consiste en seleccionar los datos que nos interesan. Por ejemplo, en los datos de casos de Covid que hemos utilizados, podremos seleccionar de ellos cuáles corresponden a mujeres y a partir de allí realizar otras operaciones de datos. Es un ejemplo simple, pero es una operación común que vamos a realizar continuamente.

El método .loc#

Este es la forma más intuitiva de realizar una selección en nuestro conjunto de datos. Lo que se consigue con este método es filtrar por coincidencias en una columna a partir de las condiciones que se especifiquen. Por ejemplo:

casos_mujeres = covid_nacional.loc[covid_nacional['sexo'] == 'MUJER']
casos_mujeres.head()
Unnamed: 0 fecha_actualizacion id_registro origen sector entidad_um sexo entidad_nac entidad_res municipio_res ... otro_caso toma_muestra_lab resultado_lab toma_muestra_antigeno resultado_antigeno clasificacion_final migrante pais_nacionalidad pais_origen uci
4 5 2022-06-26 13c92b FUERA DE USMER SSA CIUDAD DE MÉXICO MUJER CIUDAD DE MÉXICO NaN NaN ... SI NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
5 6 2022-06-26 04f190 FUERA DE USMER ISSSTE CIUDAD DE MÉXICO MUJER CIUDAD DE MÉXICO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) NO NO APLICA (CASO SIN MUESTRA) CASO SOSPECHOSO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
7 8 2022-06-26 0ba73d FUERA DE USMER ISSSTE CIUDAD DE MÉXICO MUJER QUERÉTARO MÉXICO NAUCALPAN DE JUÁREZ ... NO NO NO APLICA (CASO SIN MUESTRA) NO NO APLICA (CASO SIN MUESTRA) CASO SOSPECHOSO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
9 10 2022-06-26 0a98b4 FUERA DE USMER SSA CIUDAD DE MÉXICO MUJER MICHOACÁN DE OCAMPO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) SI POSITIVO A SARS-COV-2 CASO DE SARS-COV-2 CONFIRMADO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
11 12 2022-06-26 112072 FUERA DE USMER ISSSTE CIUDAD DE MÉXICO MUJER CIUDAD DE MÉXICO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) NO NO APLICA (CASO SIN MUESTRA) CASO SOSPECHOSO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA

5 rows × 41 columns

En este caso, le dijimos a pandas que busque en la columna sexo los valores que sean iguales a MUJER y los muestre. Como habrás notado, el operador == indica igualdad. Este es un operador lógico, por lo que no es necesario que el valor a comparar sea numérico. Podemos utilizar el mismo método para localizar un valor numérico, por ejemplo, las mujeres que tengan edad de 25 años:

mujeres_25 = casos_mujeres.loc[casos_mujeres['edad'] == 25]
mujeres_25
Unnamed: 0 fecha_actualizacion id_registro origen sector entidad_um sexo entidad_nac entidad_res municipio_res ... otro_caso toma_muestra_lab resultado_lab toma_muestra_antigeno resultado_antigeno clasificacion_final migrante pais_nacionalidad pais_origen uci
76 77 2022-06-26 1eaf9d FUERA DE USMER SSA CIUDAD DE MÉXICO MUJER CIUDAD DE MÉXICO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
120 121 2022-06-26 c54e7c FUERA DE USMER SSA CIUDAD DE MÉXICO MUJER CIUDAD DE MÉXICO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
176 177 2022-06-26 4a7184 FUERA DE USMER ISSSTE CIUDAD DE MÉXICO MUJER CIUDAD DE MÉXICO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
355 356 2022-06-26 71baef FUERA DE USMER SSA CIUDAD DE MÉXICO MUJER MÉXICO MÉXICO CHALCO ... SI NO NO APLICA (CASO SIN MUESTRA) SI POSITIVO A SARS-COV-2 CASO DE SARS-COV-2 CONFIRMADO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
750 751 2022-06-26 65cd8e USMER SSA CIUDAD DE MÉXICO MUJER CIUDAD DE MÉXICO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
1322903 1322904 2022-06-26 m10d115 FUERA DE USMER SSA MÉXICO MUJER CIUDAD DE MÉXICO NaN NaN ... NO ESPECIFICADO NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
1323061 1323062 2022-06-26 m1c3e25 FUERA DE USMER SSA MÉXICO MUJER MÉXICO NaN NaN ... NO ESPECIFICADO NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
1323178 1323179 2022-06-26 m0cbd03 FUERA DE USMER SSA MÉXICO MUJER MÉXICO NaN NaN ... NO ESPECIFICADO SI RESULTADO NO ADECUADO NO NO APLICA (CASO SIN MUESTRA) CASO SOSPECHOSO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
1323288 1323289 2022-06-26 m04a712 FUERA DE USMER SSA MÉXICO MUJER CIUDAD DE MÉXICO NaN NaN ... NO ESPECIFICADO NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
1323350 1323351 2022-06-26 m00101e FUERA DE USMER PRIVADA MÉXICO MUJER CIUDAD DE MÉXICO NaN NaN ... NO ESPECIFICADO NO NO APLICA (CASO SIN MUESTRA) NO NO APLICA (CASO SIN MUESTRA) CASO SOSPECHOSO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA

16002 rows × 41 columns

Para resaltar

  • Nota que en el caso del valor numérico no lo incluimos entre paréntesis. Eso es fundamental porque, como recordarás, en la columna edad el tipo de dato es numérico (int64).

  • Para evitar procesar todo el dataframe nuevamente, lo que hicimos fue acotar el grupo que hicimos con el primer resultado (casos_mujeres).

En ocasiones, vamos a querer descartar un valor en particular de una columna que contiene muchos elementos. Por ejemplo, en la columna entidad_nac (entidad de nacimiento de la persona) podemos querer seleccionar los valores que no sean CIUDAD DE MÉXICO:

entidad_nac_no_cdmx = casos_mujeres.loc[casos_mujeres['entidad_nac'] != 'CIUDAD DE MÉXICO']
entidad_nac_no_cdmx
Unnamed: 0 fecha_actualizacion id_registro origen sector entidad_um sexo entidad_nac entidad_res municipio_res ... otro_caso toma_muestra_lab resultado_lab toma_muestra_antigeno resultado_antigeno clasificacion_final migrante pais_nacionalidad pais_origen uci
7 8 2022-06-26 0ba73d FUERA DE USMER ISSSTE CIUDAD DE MÉXICO MUJER QUERÉTARO MÉXICO NAUCALPAN DE JUÁREZ ... NO NO NO APLICA (CASO SIN MUESTRA) NO NO APLICA (CASO SIN MUESTRA) CASO SOSPECHOSO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
9 10 2022-06-26 0a98b4 FUERA DE USMER SSA CIUDAD DE MÉXICO MUJER MICHOACÁN DE OCAMPO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) SI POSITIVO A SARS-COV-2 CASO DE SARS-COV-2 CONFIRMADO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
12 13 2022-06-26 044350 FUERA DE USMER ISSSTE CIUDAD DE MÉXICO MUJER MÉXICO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) NO NO APLICA (CASO SIN MUESTRA) CASO SOSPECHOSO NO ESPECIFICADO MÉXICO NO APLICA NO
22 23 2022-06-26 375634 USMER ISSSTE CIUDAD DE MÉXICO MUJER MÉXICO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
24 25 2022-06-26 3d59ea FUERA DE USMER SSA CIUDAD DE MÉXICO MUJER GUERRERO MÉXICO ZUMPANGO ... SI NO NO APLICA (CASO SIN MUESTRA) SI POSITIVO A SARS-COV-2 CASO DE SARS-COV-2 CONFIRMADO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
1323465 1323466 2022-06-26 m0b9e6b FUERA DE USMER SSA MÉXICO MUJER GUERRERO NaN NaN ... NO ESPECIFICADO NO NO APLICA (CASO SIN MUESTRA) NO NO APLICA (CASO SIN MUESTRA) CASO SOSPECHOSO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
1323467 1323468 2022-06-26 m10ccd6 FUERA DE USMER SSA MÉXICO MUJER MÉXICO NaN NaN ... NO ESPECIFICADO NO NO APLICA (CASO SIN MUESTRA) NO NO APLICA (CASO SIN MUESTRA) CASO SOSPECHOSO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
1323483 1323484 2022-06-26 m00d216 FUERA DE USMER SSA MÉXICO MUJER MICHOACÁN DE OCAMPO NaN NaN ... NO ESPECIFICADO SI RESULTADO NO ADECUADO NO NO APLICA (CASO SIN MUESTRA) CASO SOSPECHOSO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
1323487 1323488 2022-06-26 m0c8c4a FUERA DE USMER SSA MÉXICO MUJER MÉXICO NaN NaN ... NO ESPECIFICADO SI RESULTADO NO ADECUADO NO NO APLICA (CASO SIN MUESTRA) CASO SOSPECHOSO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
1323491 1323492 2022-06-26 m139158 FUERA DE USMER SSA MÉXICO MUJER GUANAJUATO NaN NaN ... NO ESPECIFICADO NO NO APLICA (CASO SIN MUESTRA) NO NO APLICA (CASO SIN MUESTRA) CASO SOSPECHOSO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA

144256 rows × 41 columns

Esta forma de seleccionar información es muy relevante cuando solamente nos interesa una parte de la información del conjunto de datos para analizar. Por ejemplo, si queremos averiguar los casos por un Estado en un conjunto de datos nacional, o las cifras nacionales en uno global.

Método .loc en múltiples columnas#

Los casos anteriores son bastante simples, y si te das cuenta, lo que hicimos fue hacer tres grupos para llegar al resultado deseado. Pandas nos ofrece la posibilidad de hacer una selección en múltiples columnas. Por ejemplo, si queremos seleccionar los casos de mujeres de 25 años de edad, nacidas en México, y que no sean de CDMX:

casos_mujeres_25_mexico = casos_mujeres.loc[(casos_mujeres['edad'] == 25) & (casos_mujeres['entidad_nac'] == 'MÉXICO') & (casos_mujeres['entidad_nac'] != 'CIUDAD DE MÉXICO')]
casos_mujeres_25_mexico
Unnamed: 0 fecha_actualizacion id_registro origen sector entidad_um sexo entidad_nac entidad_res municipio_res ... otro_caso toma_muestra_lab resultado_lab toma_muestra_antigeno resultado_antigeno clasificacion_final migrante pais_nacionalidad pais_origen uci
355 356 2022-06-26 71baef FUERA DE USMER SSA CIUDAD DE MÉXICO MUJER MÉXICO MÉXICO CHALCO ... SI NO NO APLICA (CASO SIN MUESTRA) SI POSITIVO A SARS-COV-2 CASO DE SARS-COV-2 CONFIRMADO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
1421 1422 2022-06-26 7a7ccb FUERA DE USMER SSA CIUDAD DE MÉXICO MUJER MÉXICO MÉXICO NEZAHUALCÓYOTL ... SI NO NO APLICA (CASO SIN MUESTRA) SI POSITIVO A SARS-COV-2 CASO DE SARS-COV-2 CONFIRMADO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
2446 2447 2022-06-26 b90a4e FUERA DE USMER IMSS CIUDAD DE MÉXICO MUJER MÉXICO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) SI POSITIVO A SARS-COV-2 CASO DE SARS-COV-2 CONFIRMADO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
2815 2816 2022-06-26 dc9510 FUERA DE USMER SSA CIUDAD DE MÉXICO MUJER MÉXICO MÉXICO LA PAZ ... NO NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
2939 2940 2022-06-26 92801c FUERA DE USMER SSA CIUDAD DE MÉXICO MUJER MÉXICO NaN NaN ... SI NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
1319471 1319472 2022-06-26 g0c9923 FUERA DE USMER SSA CIUDAD DE MÉXICO MUJER MÉXICO NaN NaN ... SI NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
1320074 1320075 2022-06-26 g029f84 FUERA DE USMER PRIVADA CIUDAD DE MÉXICO MUJER MÉXICO MÉXICO NEZAHUALCÓYOTL ... SI NO NO APLICA (CASO SIN MUESTRA) SI POSITIVO A SARS-COV-2 CASO DE SARS-COV-2 CONFIRMADO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
1321052 1321053 2022-06-26 g1e1667 FUERA DE USMER SSA CIUDAD DE MÉXICO MUJER MÉXICO MÉXICO TLALNEPANTLA DE BAZ ... SI NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
1323061 1323062 2022-06-26 m1c3e25 FUERA DE USMER SSA MÉXICO MUJER MÉXICO NaN NaN ... NO ESPECIFICADO NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
1323178 1323179 2022-06-26 m0cbd03 FUERA DE USMER SSA MÉXICO MUJER MÉXICO NaN NaN ... NO ESPECIFICADO SI RESULTADO NO ADECUADO NO NO APLICA (CASO SIN MUESTRA) CASO SOSPECHOSO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA

2126 rows × 41 columns

Si observas con atención, notarás que lo que hicimos fue encadenar varias peticiones en una sola. Para ello nos servimos del operador & (‘and’) que es un operador lógico 1.

O, los casos que corresponden a mujeres o migrantes. En este caso usaremos el operador |:

casos_mujeres_migrantes = covid_nacional.loc[(covid_nacional['sexo'] == 'MUJER') | (covid_nacional['migrante'] == 'SI')]
print(f'total casos: {casos_mujeres_migrantes.shape[0]}')
casos_mujeres_migrantes.head()
total casos: 735841
Unnamed: 0 fecha_actualizacion id_registro origen sector entidad_um sexo entidad_nac entidad_res municipio_res ... otro_caso toma_muestra_lab resultado_lab toma_muestra_antigeno resultado_antigeno clasificacion_final migrante pais_nacionalidad pais_origen uci
4 5 2022-06-26 13c92b FUERA DE USMER SSA CIUDAD DE MÉXICO MUJER CIUDAD DE MÉXICO NaN NaN ... SI NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
5 6 2022-06-26 04f190 FUERA DE USMER ISSSTE CIUDAD DE MÉXICO MUJER CIUDAD DE MÉXICO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) NO NO APLICA (CASO SIN MUESTRA) CASO SOSPECHOSO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
7 8 2022-06-26 0ba73d FUERA DE USMER ISSSTE CIUDAD DE MÉXICO MUJER QUERÉTARO MÉXICO NAUCALPAN DE JUÁREZ ... NO NO NO APLICA (CASO SIN MUESTRA) NO NO APLICA (CASO SIN MUESTRA) CASO SOSPECHOSO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
9 10 2022-06-26 0a98b4 FUERA DE USMER SSA CIUDAD DE MÉXICO MUJER MICHOACÁN DE OCAMPO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) SI POSITIVO A SARS-COV-2 CASO DE SARS-COV-2 CONFIRMADO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
11 12 2022-06-26 112072 FUERA DE USMER ISSSTE CIUDAD DE MÉXICO MUJER CIUDAD DE MÉXICO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) NO NO APLICA (CASO SIN MUESTRA) CASO SOSPECHOSO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA

5 rows × 41 columns

Notarás que se regresa una cantidad diferente de filas dependiendo del condicional. Esto simplemente se debe a que estamos utilizando un operador lógico. Así, pandas selecciona la información según lo siguiente2:

  • busca (loc) las filas en la columna sexo que cumplen con la condición 'MUJER' y con la condición 'SI' en la columna migrante. Todas las filas que no cumplan con esa condición en ambas columnas serán descartadas.

  • busca las filas de la columnna sexo que cumplan con la condición 'MUJER' o las filas de la columna migrante que cumplan con la condición 'SI'. En este caso, solamente descarta las filas que no cumplan con una de las condiciones. Por esa razón nos devolverá todos los casos donde aparezca 'MUJER' en la columna sexo y todos los casos donde aparezca 'SI' en la columna migrante.

El método .iloc#

El método .iloc permite seleccionar filas y columnas por su índice. Por ejemplo, si quisiera seleccionar las tres primeras filas del conjunto de datos:

tres_filas = covid_nacional.iloc[:3]
tres_filas
Unnamed: 0 fecha_actualizacion id_registro origen sector entidad_um sexo entidad_nac entidad_res municipio_res ... otro_caso toma_muestra_lab resultado_lab toma_muestra_antigeno resultado_antigeno clasificacion_final migrante pais_nacionalidad pais_origen uci
0 1 2022-06-26 0793b8 FUERA DE USMER SSA CIUDAD DE MÉXICO HOMBRE CIUDAD DE MÉXICO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
1 2 2022-06-26 0fef08 USMER SSA CIUDAD DE MÉXICO HOMBRE CIUDAD DE MÉXICO NaN NaN ... NO SI POSITIVO A SARS-COV-2 NO NO APLICA (CASO SIN MUESTRA) CASO DE SARS-COV-2 CONFIRMADO NO ESPECIFICADO MÉXICO NO APLICA NO APLICA
2 3 2022-06-26 11e31a FUERA DE USMER SSA CIUDAD DE MÉXICO HOMBRE CIUDAD DE MÉXICO NaN NaN ... NO NO NO APLICA (CASO SIN MUESTRA) SI NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA

3 rows × 41 columns

Ahora, podríamos seleccionar las columnas 1 a 5 de las filas 1 a 3:

filas_columnas = covid_nacional.iloc[:3, 1:5]
filas_columnas
fecha_actualizacion id_registro origen sector
0 2022-06-26 0793b8 FUERA DE USMER SSA
1 2022-06-26 0fef08 USMER SSA
2 2022-06-26 11e31a FUERA DE USMER SSA

En información muy bien estructurada, este método permite acceder a información sin preocuparnos por el tipo de dato o la forma en la cual fue escrita la celda. En general, si la información es creada a través de un gestor de base de datos el método .iloc puede ser muy útil. Es además más rápido que el método .loc, puesto que no tiene que buscar coincidencias sino seleccionar información dentro de una matriz.

Notas#


1

En Python el posible utilizar el operador lógico and, pero en pandas no es permitido. Si quieres profundizar sobre esto puedes consultar el artículo de Àlex Escolà Nixon en Towards Data Science.

2

En este curso no podemos profundizar en lógica y teoría de conjuntos, pero puedo recomendar el primer capítulo del libro de [Juola and Ramsay, 2017] para una introducción bastante comprensible de la lógica. Para la teoría de conjuntos, el capítulo de [Jannidis and Flanders, 2019] es una introducción sencilla y completa.