La función query de pandas en Python es una herramienta poderosa para filtrar y seleccionar datos de un DataFrame. Con ella, es posible escribir consultas en lenguaje natural para seleccionar filas de un DataFrame que cumplan ciertas condiciones. Esto permite a los usuarios de Python trabajar con grandes conjuntos de datos de manera eficiente y rápida.
En este blog, veremos cómo utilizar la función query para filtrar datos en un DataFrame, incluyendo cómo seleccionar filas por valores específicos, cómo utilizar operadores lógicos y cómo crear consultas más complejas.
Vamos a verlo en acción con algunos ejemplos:
Tenemos un Dataset y vamos a responder a unos problemas, pero antes entraremos a detalle con el Dataset que vamos a analizar. El Dataset que vamos a analizar contiene información sobre los votos en las elecciones de Estados Unidos en 2016 y contiene las siguientes columnas:
Estado: Contiene todos los Estados
Condado: Contiene todos los Condados de cada Estado
Partido: Contiene 2 valores, democrático y republicano
Candidato: Contiene cada uno de los candidatos
Votos: Contiene todos los votos por cada candidato, en cada condado de cada Estado.
Fracción Votos: Muestra el porcentaje que representa los votos.
Importamos librerías y el Dataset, además de aplicar un poco de limpieza a los datos.
#Importamos Libreria
import pandas as pd
# Cargar el dataset
df =pd.read_csv("/content/votos.csv")
df
Este código importa la biblioteca pandas y utiliza el método read_csv() para leer un archivo CSV específico y almacenarlo en una variable df (DataFrame de pandas).
La ruta especificada en la función read_csv es donde se encuentra el archivo a ser leído y cargado en el DataFrame.
Luego de haber cargado los datos vamos a resolver varios problemas con el método .query(
1. ¿Cuál es el total de votos en el estado de New York?
#usamos el método query para filtrar
df1 = df.query("Estado=='New York'")
#Agrupamos ese resultado por Estados y aplicamos una suma
df1.groupby(["Estado"]).sum()["Votos"]
Utilizamos el método query() de Pandas para filtrar los datos del dataframe y guardar solo las filas donde la columna Estado es igual a New York en un nuevo dataframe llamado df1.
Luego utilizamos el método groupby() para agrupar los datos en df1 por la columna Estado y luego utiliza el método sum() para sumar los valores de la columna Votos para cada grupo. Como resultado tenemos:
En New York hubo 2686539 votos.
2. ¿Cuáles son los candidatos que obtuvieron más de 200000 votos por condado?
#usamos el método query para filtrar
df2 = df.query("Votos>200000")
df2
Utilizamos el método query() para filtrar los datos del dataframe y guardar solo las filas donde la columna Votos es mayor o igual a 200,000 en un nuevo dataframe llamado df2.
Luego imprimimos el contenido del dataframe df2. Como resultado tenemos:
Como podemos ver, todos los votos son mayores a 200,000.
3. ¿En cuántos condados tuvo Donald Trump más de 100000 votos?
#usamos el método query para filtrar
df3 = df.query("Candidato=='Donald Trump' and Votos>100000")
df
Utilizamos el método query() para filtrar los datos del dataframe y guardar solo las filas donde la columna Candidato es igual a Donald Trump y la columna Votos es mayor a 100,000 en un nuevo dataframe llamado df3.
Luego imprimimos el contenido del dataframe df3 y tenemos el siguiente resultado:
Como podemos observar, el Candidato que se muestra solo es Donald Trump y los Votos son mayores a 100000.
4. ¿Cuántos candidatos tienen más de 15000 o son de partido demócrata en el estado de California
#usamos el método query para filtrar
df4 = df.query("(Votos > 15000 or Partido=='Democrat') and Estado=='California'")
df4
Utilizamos el método query() de Pandas para filtrar los datos del dataframe y guardar solo las filas donde la columna Votos es mayor a 15,000 o la columna Partido es igual a Democrat y la columna Estado es igual a California en un nuevo dataframe llamado df4.
Imprimimos el contenido del dataframe df4 y tenemos el siguiente resultado:
Vemos que se filtro el Estado de California, pero en Partido vemos Democrat y también Republican, y no solo eso si no que vemos Votos mayores a 15000 y también menores. ¿Por qué sucedió esto?, bueno esto sucede por el operador OR que cumple su función de que al menos se cumpla una de las dos condiciones dadas para poder mostrarse.
5. ¿Cuáles fueron los candidatos que obtuvieron más de 10000 votos en el condado de Jefferson o Madison que pertenecen al estado de Alabama?
#usamos el método query para filtrar
df5 = df.query("Estado=='Alabama' and (Condado=='Jefferson' or Condado=='Madison') and Votos>10000 ")
df5
Se utiliza el método query() de Pandas para filtrar los datos del dataframe y guardar solo las filas donde la columna Estado es igual a Alabama, la columna Condado es igual a Jefferson o Madison y la columna Votos es mayor a 10,000 en un nuevo dataframe llamado df5.
Imprimimos el contenido del dataframe df5 y tenemos como resultado lo siguiente:
Vemos que se muestra el Estado de Alabama, también vemos que los Votos son mayores a 10,000, pero vemos en la columna de Condado el resultado de Jefferson y de Madison. Bueno, al igual que el caso anterior aplicamos el operador OR para filtrar sea tanto el primer filtro como el segundo filtro
En resumen, query es una herramienta útil para filtrar datos con pandas. Si desea obtener más información sobre cómo usar query, puede consultar la documentación de pandas. Espero que haya sido de utilidad esta información para que lo apliques en tu trabajo o en tu empresa.