Cómo filtrar filas de DataFrames en función de los valores de columna en Pandas
- Seleccione filas de pandas en función del valor de columna específico
- Seleccione filas de Pandas que no contengan un valor de columna específico
- Seleccione filas de Pandas con valores de columna mayores o menores que el valor específico
- Seleccione filas de pandas en función de los valores de varias columnas
- Seleccione filas de DataFrame con varias condiciones
Podemos seleccionar filas de DataFrame
en función de valores de columna única o múltiple. También podemos obtener filas de DataFrame
que satisfacen o no satisfacen una o más condiciones. Esto se puede lograr utilizando el método de indexación booleana
, indexación posicional
, indexación de etiquetas
y query()
.
Seleccione filas de pandas en función del valor de columna específico
Podemos seleccionar filas de pandas de un DataFrame que contiene o no contiene el valor específico para una columna. Es ampliamente utilizado en el filtrado del DataFrame basado en el valor de la columna.
Seleccione filas de Pandas que contengan un valor de columna específico
Filtrar mediante indexación booleana
En la indexación booleana, al principio generamos una máscara que es solo una serie de valores booleanos que representan si la columna contiene el elemento específico o no.
df_mask = df["col_name"] == "specific_value"
Luego aplicamos esta máscara a nuestro DataFrame original para filtrar los valores requeridos.
filtered_df = df[df_mask]
Esto devuelve el DataFrame filtrado que contiene solo filas que tienen el valor_específico
para la columna col_name
.
import pandas as pd
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
df_mask = df["Sales"] == 300
filtered_df = df[df_mask]
print(filtered_df)
Producción :
Date Sales Price
1 April-11 300 1
4 April-14 300 3
5 April-16 300 2
Esto da todas las filas en el df
cuyos valores de Sales
son 300
.
Filtrar mediante indexación posicional
Es similar a la indexación booleana pero implica un paso adicional. En este método, primero creamos una máscara booleana y luego encontramos posiciones en las que la máscara booleana tiene el valor True
. Luego usamos pasar todas las posiciones con el valor True
en la máscara al método iloc()
para que solo se seleccionen todas las filas deseadas.
import pandas as pd
import numpy as np
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
df_mask = df["Sales"] == 300
positions = np.flatnonzero(df_mask)
filtered_df = df.iloc[positions]
print(filtered_df)
Producción :
Date Sales Price
1 April-11 300 1
4 April-14 300 3
5 April-16 300 2
Esto también da todas las filas en el df
cuyos valores de Sales
son 300
.
Pandas encadenando
También podemos usar Pandas Chaining para filtrar el filtro de DataFrame de pandas por valor de columna. En este método, utilizamos pandas.DataFrame.eq()
método para la columna DataFrame cuyos valores deben verificarse para comparar la igualdad de elementos en DataFrame.
import pandas as pd
import numpy as np
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
filtered_df = df[df.Sales.eq(300)]
print(filtered_df)
Producción :
Date Sales Price
1 April-11 300 1
4 April-14 300 3
5 April-16 300 2
pandas.DataFrame.query()
Podríamos usar pandas.DataFrame.query()
para seleccionar filas por valor de columna en Pandas.
import pandas as pd
import numpy as np
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
filtered_df = df.query("Sales == 300")
print(filtered_df)
Producción :
Date Sales Price
1 April-11 300 1
4 April-14 300 3
5 April-16 300 2
Si deseamos actualizar el DataFrame existente, podemos establecer inplace=True
en el método de consulta.
Seleccione filas de Pandas que no contengan un valor de columna específico
El método para seleccionar filas Pandas que no contienen un valor de columna específico es similar al de seleccionar filas Pandas con un valor de columna específico. Lo único que necesitamos cambiar es la condición de que la columna no contenga un valor específico simplemente reemplazando ==
con !=
Al crear máscaras o consultas.
import pandas as pd
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
df_mask = df["Sales"] != 300
filtered_df = df[df_mask]
print(filtered_df)
Producción :
Date Sales Price
0 April-10 200 3
2 April-12 400 2
3 April-13 200 4
Esto selecciona todas las filas de df
cuyos valores de Ventas
no son 300
.
Seleccione filas de Pandas con valores de columna mayores o menores que el valor específico
Para seleccionar filas Pandas con valores de columna mayores o menores que un valor específico, utilizamos operadores como >
, <=
, >=
al crear máscaras o consultas.
import pandas as pd
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
df_mask = df["Sales"] >= 300
filtered_df = df[df_mask]
print(filtered_df)
Producción :
Date Sales Price
1 April-11 300 1
2 April-12 400 2
4 April-14 300 3
5 April-16 300 2
Esto da como resultado DataFrame con valores de Sales
mayores o iguales que 300
.
Seleccione filas de pandas en función de los valores de varias columnas
Hemos introducido métodos para seleccionar filas basadas en valores específicos de columna en DataFrame. En esta sección, analizaremos los métodos para seleccionar las filas de Pandas en función de los valores de varias columnas.
Seleccione filas de Pandas que contengan cualquiera de los valores de múltiples columnas
Para seleccionar filas de Pandas que contengan cualquiera de los valores de múltiples columnas, utilizamos pandas.DataFrame.isin(values)
que devuelve DataFrame de booleanos que muestra si cada elemento en el DataFrame está contenido o no en valores. El DataFrame de booleanos así obtenido puede usarse para seleccionar filas.
import pandas as pd
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
values = [200, 400]
filtered_df = df[df.Sales.isin(values)]
print(filtered_df)
Producción :
Date Sales Price
0 April-10 200 3
2 April-12 400 2
3 April-13 200 4
Filtra todas las filas de DataFrame cuyo valor de Sales
es 200
o 400
.
Seleccione filas de Pandas que no contengan ninguno de los múltiples valores de columna especificados
Para seleccionar las filas de un DataFrame que no contiene ninguno de los múltiples valores de columna especificados, negaremos el DataFrame de booleanos devuelto por pandas.DataFrame.isin(values)
colocando el signo ~
en la parte delantera.
import pandas as pd
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
values = [200, 400]
filtered_df = df[~df.Sales.isin(values)]
print(filtered_df)
Producción :
Date Sales Price
1 April-11 300 1
4 April-14 300 3
5 April-16 300 2
Filtra todas las filas de DataFrame cuyo valor de Sales
no es ni 200
ni 400
.
Seleccione filas de DataFrame con varias condiciones
Si queremos filtrar filas considerando los valores de fila de varias columnas, creamos múltiples condiciones y las combinamos con operadores &
. Ahora, la fila solo se selecciona cuando cumple las condiciones para todas las columnas.
import pandas as pd
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
values_1 = [200, 400]
values_2 = [2, 3]
filtered_df = df[df.Sales.isin(values_1) & ~df.Price.isin(values_2)]
print(filtered_df)
Producción :
Date Sales Price
3 April-13 200 4
Filtra todas las filas de DataFrame cuyo valor de Sales
es 200
o 400
y el valor de Price
no es ni 2 ni 3. La fila de la salida solo cumple ambas condiciones en el DataFrame completo.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedInArtículo relacionado - Pandas DataFrame
- Cómo obtener las cabeceras de columna de Pandas DataFrame como una lista
- Cómo borrar la columna de Pandas DataFrame
- Cómo convertir la columna del DataFrame a Datetime en Pandas
- Cómo convertir un float en un entero en Pandas DataFrame
- Cómo clasificar Pandas DataFrame por los valores de una columna
- Cómo obtener el agregado de Pandas grupo por y suma
Artículo relacionado - Pandas DataFrame Row
- Cómo obtener el recuento de filas de un Pandas DataFrame
- Cómo barajar aleatoriamente filas de DataFrame en Pandas
- Cómo iterar a través de filas de un DataFrame en Pandas
- Cómo obtener el índice de todas las filas cuya columna particular satisface la condición dada en Pandas
- Encuentre filas duplicadas en un marco de datos usando Pandas