Uso de arrays booleanos

Una muy interesante opción para seleccionar elementos de una serie pandas es usar arrays booleanos. Por ejemplo, partimos de la siguiente serie:

Uso de arrays booleanos

Podemos seleccionar un conjunto de valores de la misma haciendo referencia al nombre de la serie y, entre los corchetes, una lista o array de booleanos (también puede ser una serie de booleanos, como veremos un poco más adelante):

Uso de arrays booleanos

En este caso hemos seleccionado los elementos cuyos índices son 0, 3 y 4, que son los índices que ocupan los booleanos True en la lista de booleanos usada (lista cuya longitud deberá ser igual a la longitud de la serie pues, de no ser así, se devuelve un error).

Esta lista o array de booleanos no tiene porqué ser especificada de forma explícita, puede ser el resultado de una expresión:

Uso de arrays booleanos

Aquí, hemos usado la expresión s > 2 para generar una serie pandas de booleanos, serie en la que los valores toman el valor True cuando el valor con el mismo índice de s toma un valor mayor estricto que 2.

Podemos entonces usar este resultado para extraer valores de la serie s (valores que serán aquellos mayores que 2):

Uso de arrays booleanos

Este mismo enfoque puede ser usado con los métodos pandas.Series.loc y pandas.Series.iloc ya vistos en las secciones anteriores con algún matiz adicional:

El método loc puede ser usado tanto con un array explícito de booleanos:

Uso de arrays booleanos con el método loc

...como con una expresión que genera, por ejemplo, una serie pandas de booleanos:

Uso de arrays booleanos con el método loc

Sin embargo, el método iloc tiene un comportamiento ligeramente diferente. Puede ser usados con arrays explícitos de booleanos:

Uso de arrays booleanos con el método loc

...pero el uso de expresiones que generen una serie pandas de booleanos devuelve un error:

Uso de arrays booleanos con el método loc

Si el objeto que está generando la estructura de booleanos (s, en s > 2) fuese un array NumPy en lugar de tratarse de una serie pandas, sí sería posible usar el método .iloc. De esta forma, la expresión s > 2 genera, como hemos visto, una serie pandas, pero podemos extraer los valores con el atributo values, que genera un array numpy:

Uso de arrays booleanos con el método loc

Si usamos esta expresión para realizar la selección en la serie original s, el resultado es ahora el correcto:

Uso de arrays booleanos con el método loc

Es por ello que pandas recomienda usar el método loc cuando trabajemos con selección basada en booleanos.