Como filtrar linhas de dados com base nos valores das colunas em Pandas
- Selecionar Linhas de Pandas com base no valor específico da coluna
- Selecionar Linhas de Pandas que não contêm valor específico de coluna
- Selecione Linhas de Pandas com Valores de Coluna Maior ou Menor do que o Valor Específico
- Selecione Linhas de Pandas com base em valores de Múltiplas Colunas
- Selecione Fileiras DataFrame com múltiplas condições
Podemos selecionar linhas de DataFrame
com base em valores de coluna única ou múltipla. Também podemos obter linhas de DataFrame
satisfazendo ou não uma ou mais condições. Isto pode ser feito utilizando o método boolean indexing
, positional indexing
, label indexing
, e query()
.
Selecionar Linhas de Pandas com base no valor específico da coluna
Podemos selecionar linhas de pandas de um DataFrame que contenha ou não o valor específico para uma coluna. Ele é amplamente utilizado na filtragem do DataFrame com base no valor da coluna.
Selecione Linhas de Pandas que contenham o valor específico de uma coluna
Filtro usando indexação booleana
Na indexação booleana, a princípio geramos uma máscara que é apenas uma série de valores booleanos, representando se a coluna contém ou não o elemento específico.
df_mask = df["col_name"] == "specific_value"
Em seguida, aplicamos esta máscara à nossa DataFrame original para filtrar os valores requeridos.
filtered_df = df[df_mask]
Isto retorna a DataFrame filtrada contendo apenas linhas que têm o specific_value
para a coluna 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)
Resultado:
Date Sales Price
1 April-11 300 1
4 April-14 300 3
5 April-16 300 2
Isto dá todas as linhas no df
cujos valores Sales
são 300
.
Filtro utilizando indexação posicional
É semelhante à indexação booleana, mas envolve uma etapa extra. Neste método, primeiro criamos uma máscara booleana e depois encontramos posições nas quais a máscara booleana tem valor True
. Em seguida, passamos todas as posições com o valor True
na máscara para o método iloc()
, de modo que todas as linhas desejadas sejam apenas selecionadas.
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)
Resultado:
Date Sales Price
1 April-11 300 1
4 April-14 300 3
5 April-16 300 2
Isto também dá todas as linhas no df
cujos valores de Sales
são 300
.
Encadeamento de Pandas
Também podemos usar o Pandas Chaining para filtrar pandas dataframe filtro por valor de coluna. Neste método, utilizamos o método pandas.DataFrame.eq()
para a coluna DataFrame cujos valores devem ser verificados para comparar a igualdade dos elementos em 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)
Resultado:
Date Sales Price
1 April-11 300 1
4 April-14 300 3
5 April-16 300 2
pandas.DataFrame.query()
Poderíamos utilizar pandas.DataFrame.query()
para selecionar linhas por valor de coluna em 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)
Resultado:
Date Sales Price
1 April-11 300 1
4 April-14 300 3
5 April-16 300 2
Se desejarmos atualizar o DataFrame existente, podemos definir inplace=True
no método de consulta.
Selecionar Linhas de Pandas que não contêm valor específico de coluna
O método para selecionar linhas de Pandas que não contêm valor de coluna específico é semelhante ao da seleção de linhas de Pandas com valor de coluna específico. A única coisa que precisamos alterar é a condição de que a coluna não contenha valor específico, substituindo ==
por !=
ao criar máscaras ou 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)
Resultado:
Date Sales Price
0 April-10 200 3
2 April-12 400 2
3 April-13 200 4
Isto seleciona todas as linhas de df
cujos valores de Sales
não são 300
.
Selecione Linhas de Pandas com Valores de Coluna Maior ou Menor do que o Valor Específico
Para selecionar linhas de Pandas com valores de coluna maiores ou menores que o valor específico, utilizamos operadores como >
, <=
, >=
enquanto criamos máscaras ou 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)
Resultado:
Date Sales Price
1 April-11 300 1
2 April-12 400 2
4 April-14 300 3
5 April-16 300 2
Isto resulta em DataFrame com valores de Sales
maiores ou iguais a 300
.
Selecione Linhas de Pandas com base em valores de Múltiplas Colunas
Introduzimos métodos de seleção de linhas com base em valores específicos de coluna no DataFrame. Nesta seção, discutiremos métodos para selecionar linhas de Pandas com base em valores de colunas múltiplas.
Selecione Linhas de Pandas que contenham qualquer um dos valores de múltiplas colunas
Para selecionar linhas Pandas que contenham qualquer um dos valores de múltiplas colunas, utilizamos pandas.DataFrame.isin(values)
que retorna DataFrame de booleans mostrando se cada elemento do DataFrame está contido em valores ou não. O DataFrame de booleans assim obtido pode ser utilizado para selecionar linhas.
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)
Resultado:
Date Sales Price
0 April-10 200 3
2 April-12 400 2
3 April-13 200 4
Ele filtra todas as linhas da DataFrame cujo valor Sales
é 200
ou 400
.
Selecione Linhas de Pandas que não contenham nenhum dos valores de múltiplas colunas especificadas
Para selecionar as linhas de um DataFrame que não contenha nenhum dos múltiplos valores especificados na coluna, negaremos o DataFrame de booleanos retornados de pandas.DataFrame.isin(valores)
colocando o sinal ~
na frente.
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)
Resultado:
Date Sales Price
1 April-11 300 1
4 April-14 300 3
5 April-16 300 2
Ele filtra todas as linhas da DataFrame cujo valor de Sales
não é nem 200
nem 400
.
Selecione Fileiras DataFrame com múltiplas condições
Se quisermos filtrar linhas considerando valores de linhas de múltiplas colunas, fazemos múltiplas condições e as combinamos com operadores &
. Agora, a linha só é selecionada quando satisfaz as condições para todas as colunas.
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)
Resultado:
Date Sales Price
3 April-13 200 4
Filtra todas as linhas da DataFrame cujo valor de Sales
é ou 200
ou 400
e o valor de Price
não é nem 2 nem 3. A linha na saída só satisfaz ambas as condições em toda a DataFrame.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedInArtigo relacionado - Pandas DataFrame
- Como obter os cabeçalhos da coluna Pandas DataFrame como uma lista
- Como eliminar a coluna Pandas DataFrame
- Como Converter a Coluna DataFrame para DataTempo em Pandas
- Como Converter um Flutuador em um Inteiro em Pandas DataFrame
- Como Classificar Pandas DataFrame pelos Valores de uma Coluna
- Como Obter o Agregado de Pandas Group-By e Sum
Artigo relacionado - Pandas DataFrame Row
- Como obter a contagem de filas de um Pandas DataFrame
- Como embaralhar aleatoriamente linhas DataFrame em Pandas
- Como Iterar Através de Linhas de um DataFrame em Pandas
- Como obter índice de todas as linhas cuja coluna específica satisfaz dada a condição em Pandas
- Obter a Primeira Fila de Pandas de Dataframe