Table of Contents
Introducción
Comenzamos con el segundo post de nuestra saga de formación con Pandas. En este artículo vamos a hacer un resumen de las diferentes funciones que se utilizan en Pandas para realizar la Indexación, Selección y Filtrado.
Indexación, selección y filtrado
Antes de empezar, vamos a visualizar un pequeño conjunto de datos de ejemplo que vamos a seguir para poner los ejemplos. Se trata de un conjunto de datos muy conocido que contiene información sobre el vino.
Como introducción, vamos a explicar algunas funciones que pueden ser muy útiles a la hora de obtener una visión más amplia del estado de nuestro conjunto de datos.
Obteniendo información
Información
Empezaremos con la función info(), que nos ofrece información sobre el número de columnas, el nombre de cada columna, Empezaremos con la función info(), que nos ofrece información sobre el número y los nombres de las columnas, el número de elementos no nulos y el tipo de datos de cada columna.
df.info()
Wines Dataset:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1599 entries, 0 to 1598
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 fixed acidity 1599 non-null float64
1 volatile acidity 1599 non-null float64
2 citric acid 1599 non-null float64
3 residual sugar 1599 non-null float64
4 chlorides 1599 non-null float64
5 free sulfur dioxide 1599 non-null float64
6 total sulfur dioxide 1599 non-null float64
7 density 1599 non-null float64
8 pH 1599 non-null float64
9 sulphates 1599 non-null float64
10 alcohol 1599 non-null float64
11 quality 1599 non-null int64
dtypes: float64(11), int64(1)
memory usage: 150.0 KB
Dtypes
Continuamos con el atributo dtypes que nos muestra exclusivamente el tipo de datos de cada columna.
df.dtypes
Wines Dataset:
fixed acidity float64
volatile acidity float64
citric acid float64
residual sugar float64
chlorides float64
free sulfur dioxide float64
total sulfur dioxide float64
density float64
pH float64
sulphates float64
alcohol float64
quality int64
dtype: object
Describe
La siguiente función nos proporciona información sobre numerosos cálculos estadísticos que nos ayudan a comprender la distribución de nuestro conjunto de datos.
df.describe()
Wines Dataset:
fixed acidity volatile acidity citric acid residual sugar chlorides free sulfur dioxide total sulfur dioxide density pH sulphates alcohol quality
count 1599.000000 1599.000000 1599.000000 1599.000000 1599.000000 1599.000000 1599.000000 1599.000000 1599.000000 1599.000000 1599.000000 1599.000000
mean 8.319637 0.527821 0.270976 2.538806 0.087467 15.874922 46.467792 0.996747 3.311113 0.658149 10.422983 5.636023
std 1.741096 0.179060 0.194801 1.409928 0.047065 10.460157 32.895324 0.001887 0.154386 0.169507 1.065668 0.807569
min 4.600000 0.120000 0.000000 0.900000 0.012000 1.000000 6.000000 0.990070 2.740000 0.330000 8.400000 3.000000
25% 7.100000 0.390000 0.090000 1.900000 0.070000 7.000000 22.000000 0.995600 3.210000 0.550000 9.500000 5.000000
50% 7.900000 0.520000 0.260000 2.200000 0.079000 14.000000 38.000000 0.996750 3.310000 0.620000 10.200000 6.000000
75% 9.200000 0.640000 0.420000 2.600000 0.090000 21.000000 62.000000 0.997835 3.400000 0.730000 11.100000 6.000000
max 15.900000 1.580000 1.000000 15.500000 0.611000 72.000000 289.000000 1.003690 4.010000 2.000000 14.900000 8.000000
Indexación y selección
Aquí vamos a profundizar en la explicación de las dos principales funciones pandas de indexación y selección: ‘iloc’ and ‘loc’
+ .loc se basa principalmente en etiquetas, pero también puede utilizarse con una matriz booleana. .loc lanzará un KeyError cuando no se encuentren los elementos. Las entradas permitidas son:
– Una sola etiqueta, por ejemplo, 5 o ‘a’ (Nótese que 5 se interpreta como una etiqueta del índice. Este uso no es una posición entera a lo largo del índice).
– Una lista o matriz de etiquetas [‘a’, ‘b’, ‘c’].
– Un objeto slice con las etiquetas ‘a’:’f’ ( Al contrario de lo que ocurre con los slices habituales de Python, se incluyen tanto el inicio como el final, cuando están presentes en el índice! Ver Slicing con labels y Endpoints son inclusivos).
– Una matriz booleana (cualquier valor NA será tratado como Falso).
– Una función invocable con un argumento (la Serie o el DataFrame de llamada) y que devuelve una salida válida para la indexación (una de las anteriores).
+ .iloc se basa principalmente en posiciones enteras (de 0 a la longitud-1 del eje), pero también puede utilizarse con una matriz booleana. .iloc lanzará un IndexError si un indexador solicitado está fuera de los límites, excepto los indexadores de rodajas que permiten la indexación fuera de los límites. (esto se ajusta a la semántica de cortes de Python/NumPy). Las entradas permitidas son:
– Un número entero, por ejemplo, 5.
– Una lista o matriz de enteros [4, 3, 0].
– Un objeto slice con ints 1:7.
– Una matriz booleana (cualquier valor NA será tratado como Falso).
– Una función invocable con un argumento (la Serie o el DataFrame de llamada) y que devuelve una salida válida para la indexación (una de las anteriores).
No hay mejor manera de entender cómo funciona una función que mostrando ejemplos, así que aquí tienes un amplio abanico de ejemplos de uso para ver cuáles son las diferentes maneras de utilizarlas.
Ejemplos de `iloc`
+ Obtener la primera fila
df.iloc[0]
+ Obtener la primera columna
df.iloc[:, 0]
+ Obtener la primera columna de la primera fila
df.iloc[0:1, 0]
+ Obtener filas de 3 a 5
df.iloc[3:5]
+ Obtener las filas 3, 7, 10
df.iloc[[3, 7, 10]]
+ Obtener las últimas cinco filas
df.iloc[-5:]
Ejemplos de `loc`
+ Obtener la primera fila de la columna «quality»
df.loc[0, 'quality']
+ Obtener todas las filas de las columnas «quality», «sulphates», «alcohol»
df.loc[:, ['quality', 'sulphates', 'alcohol']]
+ Obtener de la fila llamada «litres» hacia adelante de las columnas «quality» a «alcohol»
df1.loc['litres':, 'quality':'alcohol']
+ Obtener filas de 3 a 5 (Diferente de iloc)
df.loc[3:5]
Filtrado
Una de las cosas que más nos ayuda cuando trabajamos con datos es poder filtrarlos según ciertas condiciones. Para ellos, la función `loc` nos permite introducir estas condiciones de la siguiente manera:
+ Obtén todos los vinos cuya calidad sea superior a 6
wines.loc[wines.quality > 6]
+ Obtén todos los vinos cuya calidad sea superior a 5 e inferior a 8
wines.loc[(wines.quality > 5) & (wines.quality < 8)]
+ Obtén todos los vinos cuya calidad sea igual a 5 o igual a 7
wines.loc[(wines.quality == 5) | (wines.quality == 7)]
Entrenando tus habilidades
Si quieres llevar tus habilidades un paso más allá en Ciencia de Datos, hemos creado un curso que puedes descargar gratuitamente aquí.
En el próximo capítulo, profundizaremos en las funciones que utilizamos para iterar, mapear, agrupar y ordenar.