
La indexación booleana en Pandas permite seleccionar de forma sencilla los elementos de un DataFrame en base a que los valores de una o varias filas cumplan ciertas condiciones. Solamente se debe crear un vector booleano con el valor True
en las filas que se desean seleccionar. Algo que es fácil cuando la condición se debe comparar con un único valor, solamente se debe escribir la condición lógica. Para el caso de que se desee filtrar en base a listas se puede usar el método .isin()
que poseen los DataFrames, veamos cómo se puede usar.
Seleccionar los elementos de un DataFrame en base a varios valores
En un DataFrame de Pandas se pueden seleccionar las filas en base a los valores de este usaron indexación booleana. Cuando se tiene que usar más de un valor se pueden combinar las condiciones. Por ejemplo, si se tiene un DataFrame con los valores entre 1 y 5 y se desea seleccionar los valores 2 y 4 se puede usar el siguiente código.
import pandas as pd # Crear un DataFrame de ejemplo data = {'columna_a_filtrar': [1, 2, 3, 4, 5]} df = pd.DataFrame(data) # Seleccionar las filas con 2 o 4 mediante indexación boolean resultado = df[(df['columna_a_filtrar'] == 2) | (df['columna_a_filtrar'] == 4)] print(resultado)
columna_a_filtrar 1 2 3 4
En este ejemplo, una vez creado en DataFrame, se seleccionan únicamente aquellas columnas que contienen los valores 2 o 4 en la columna columna_a_filtrar
. Algo bastante sencillo cuando son dos o tres valores, pero que se hace tedioso cuando son más de dos valores. Para estos casos se puede recurrir al método .isin()
de los objetos DataFrame.
Filtrar en base a listas con .isin()
El método .isin()
de los DataFrame Pandas devuelve recibe una lista de valores y devuelve verdadero cuando el elemento de cada uno de los elementos de la Serie o DataFrame está en esa lista, falso en el resto de los casos. Así realizar la operación anterior se vuelve más sencillo, no es necesario escribir más código ni usar un bucle cuando aumenta el número de valores a comprobar. Solamente se debe usar el resultado del método como condición de filtrado. Lo que se puede ver en el siguiente ejemplo.
# Crear una lista con el filtro data_filtro = [2, 4] # Usar el método .isin() para filtrar resultado = df[df['columna_a_filtrar'].isin(data_filtro)] print(resultado)
columna_a_filtrar 1 2 3 4
En este caso se ha creado una lista que se pasa como parámetro al método .isin()
, siendo el resultado del método lo que se usa para el filtrado. Obteniendo los mismos resultados que antes con un código más sencillo de leer.
Filtrar en base a un DataFrame
En el caso anterior también se puede usar el contenido de un DataFrame, como se puede ver en el siguiente ejemplo.
# Crear un DataFrame con el filtro data_filtro = {'filtro': [2, 4]} df_filtro = pd.DataFrame(data_filtro) # Usar el método .isin() para filtrar resultado = df[df['columna_a_filtrar'].isin(df_filtro['filtro'])] print(resultado)
columna_a_filtrar 1 2 3 4
Seleccionar las filas que no coincidan con los valores
Si lo que se desea es seleccionar aquellos elementos que no están en la lista se puede usar el operador negación lógica (~
) para invertir la selección. Lo que se muestra a continuación.
# Eliminar filas que coincidan con los valores en el DataFrame de filtro resultado = df[~df['columna_a_filtrar'].isin(df_filtro['filtro'])] print(resultado)
columna_a_filtrar 0 1 2 3 4 5
En este caso solamente se ha interpuesto el operador negación lógica para invertir la selección.
Conclusiones
El método .isin()
permite comprobar de una forma rápida los elementos de un DataFrame o Serie se corresponde con los valores de una lista. Por lo que el resultado se puede emplear para filtrar en base a listas.
Deja una respuesta