Recordemos de la clase pasada el DataFrame
# Importamos el módulo necesario
import pandas as pd
# Creamos el diccionario
dict1 = {
'País': ['Brazil', 'Rusia', 'India', 'China', 'Japón'],
'Capital': ['Brasilia', 'Moscú', 'Nueva Delhí', 'Beijing', 'Tokio'],
'Población': [200.4, 140, 1300, 1500, 500]
}
# Creamos el DataFrame
d1 = pd.DataFrame(dict1)
# Modificamos el índice por defecto
d1.index = ['BR', 'RU', 'IN', 'CH', 'JA']
# veamos ahora nuestro DataFrame
d1
País | Capital | Población | |
---|---|---|---|
BR | Brazil | Brasilia | 200.4 |
RU | Rusia | Moscú | 140.0 |
IN | India | Nueva Delhí | 1300.0 |
CH | China | Beijing | 1500.0 |
JA | Japón | Tokio | 500.0 |
y recordemos que mediante corchetes y dobles corchetes podemos acceder a la información que guarda nuestro DataFrame, accediendo desde columnas o desde filas. Asimismo, podemos expandir dichas funcionalidades utilizando las fuciones log e ilog.
Por otro lado, podemos realizar comparaciones lógicas para buscar una información en especifico, comparando una propiedad con todas las entradas de una columna o fila. Por ejemplo, podemos intentar buscar si en alguna entrada de la columna País
hay un algún valor 'Brazil'
escribiendo
# Accedemos a la columna Pais escribiendo d1[['País']]
d1[['País']] == 'Brazil'
País | |
---|---|
BR | True |
RU | False |
IN | False |
CH | False |
JA | False |
donde en una entrada vemos un True
, indicando que ahí la entrada tiene el valor buscado ('Brazil'
). Podemos también realizar comparaciones del tipo
d1[['Población']] > 1000
Población | |
---|---|
BR | False |
RU | False |
IN | True |
CH | True |
JA | False |
que realiza la búsqueda de las entradas cuyos valores sean mayores a 1000, colocando en su respectivo lugar True
o False
si dicho valor excede a 1000 o no, respectivamente. Con lo anterior podemos ver que CH
y IN
cumplen con dicha propiedad. Continuando, podemos seleccionar sólo aquellas filas que cumplan la propiedad que declaramos, para ello debemos acceder al DataFrame entre corchetes, colocando dentro de ellos la propiedad que deseamos aplicar. Por ejemplo, podemos seleccionar las filas del DataFrame que cumplan la propiedad d1[['Población']] > 1000
. Salvo que en este caso utilizaremos sólo unos corchetes, esto es d1['Población'] > 1000
:
d1[ d1['Población'] > 1000 ]
País | Capital | Población | |
---|---|---|---|
IN | India | Nueva Delhí | 1300.0 |
CH | China | Beijing | 1500.0 |
o alternativamente, para no confundirnos sobre el uso de los corchetes dobles o simples y sus distintas funcionalidades, podemos emplear la nomenclatura del punto. Para ello requerimos del nombre del DataFrame punto el nombre de la columna:
d1[ d1.Población > 1000 ]
País | Capital | Población | |
---|---|---|---|
IN | India | Nueva Delhí | 1300.0 |
CH | China | Beijing | 1500.0 |
lo cual nos arroja el mismo resultado. De tal manera, cuando deseemos acceder a las filas de un DataFrame que cumplen con una propiedad utlizaremos la sintaxis anterior y no la de los corchetes. De hecho, con la nomenclatura del punto como vimos antes, podemos obtener de otra manera Series Pandas:
print(d1.País)
print('-'*40)
print(type(d1.País))
BR Brazil RU Rusia IN India CH China JA Japón Name: País, dtype: object ---------------------------------------- <class 'pandas.core.series.Series'>
Por otro lado, podemos combinar lo aprendido en la clase anterior con la selección de filas dada una propiedad. Recordemos que podemos seleccionar, por ejemplo, todas las filas de nuestro DataFrame mostrando sólo algunas columnas
d1.loc[:, ['País', 'Población']]
País | Población | |
---|---|---|
BR | Brazil | 200.4 |
RU | Rusia | 140.0 |
IN | India | 1300.0 |
CH | China | 1500.0 |
JA | Japón | 500.0 |
de tal manera, como d1[ d1.Población > 1000 ]
es también un DataFrame (comprueba lo anterior ejecutando type(d1[ d1.Población > 1000 ])
), podemos acceder a las entradas especificas de ciertas columnas
d1[ d1.Población > 1000 ].loc[:, ['País', 'Población']]
País | Población | |
---|---|---|
IN | India | 1300.0 |
CH | China | 1500.0 |
en donde omitimos la información de la columna Capital
pues en este caso no es relevante.
Con base en todo lo anterior y combinando el conocimiento adquirido podemos realizar diversas búsquedas de información dentro de nuestro DataFrame. Otros ejemplos pueden ser
# Valores de la fila cuya entrada en la columna País es igual a Brazil
d1[ d1.País == 'Brazil']
País | Capital | Población | |
---|---|---|---|
BR | Brazil | Brasilia | 200.4 |
# Omitimos la columna Capital pues no es relevante este caso
d1[ d1.País == 'Brazil'].iloc[[0], [0, 2]]
País | Población | |
---|---|---|
BR | Brazil | 200.4 |