Obter Índice de Linhas cuja Coluna Corresponde a Valor Específico em Pandas
- Obter Índices de Linhas contendo números inteiros/flutuantes em Pandas
- Obter Índices de Linhas contendo Strings em Pandas
Este artigo demonstra como obter o índice de linhas cuja coluna corresponde a certos critérios em Pandas.
A necessidade de encontrar os índices das filas é importante na engenharia de características. Estas competências podem ser úteis para remover os valores anómalos ou anómalos de um Quadro de Dados. Os índices, também conhecidos como os rótulos das linhas, podem ser encontrados em Pandas, utilizando várias funções. Nos exemplos seguintes, iremos trabalhar no dataframe criado usando o seguinte trecho.
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.randint(1, 20, size=(20, 4)), columns=list("ABCD"))
print(df)
Resultado:
A B C D
0 13 16 1 4
1 4 8 10 19
2 5 7 13 2
3 7 8 15 18
4 6 14 9 10
5 17 6 16 16
6 1 19 4 18
7 15 8 1 2
8 10 1 11 4
9 12 19 3 1
10 1 5 6 7
11 9 18 16 5
12 10 11 2 2
13 8 10 4 7
14 12 15 19 1
15 15 4 13 11
16 12 5 7 5
17 16 4 13 5
18 9 15 16 4
19 16 14 17 18
Obter Índices de Linhas contendo números inteiros/flutuantes em Pandas
A função pandas.DataFrame.loc
pode aceder a linhas e colunas pelas suas etiquetas/nomes. É directamente para a frente ao devolver as linhas que correspondem à condição booleana passada como uma etiqueta. Repare nos parênteses rectos ao lado de df.loc
no snippet.
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.randint(1, 20, size=(20, 4)), columns=list("ABCD"))
print(df.loc[df["B"] == 19])
As linhas correspondentes à condição booleana são devolvidas como uma saída no formato de um Dataframe.
Resultado:
A B C D
6 1 19 4 18
9 12 19 3 1
Múltiplas condições podem ser encadeadas e aplicadas em conjunto à função, como se mostra abaixo. Isto ajuda a isolar as filas com base em condições específicas.
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.randint(1, 20, size=(20, 4)), columns=list("ABCD"))
print(df.loc[(df["B"] == 19) | (df["C"] == 19)])
Resultado:
A B C D
6 1 19 4 18
9 12 19 3 1
14 12 15 19 1
Obter índice de linhas com pandas.DataFrame.index()
Se quiser encontrar apenas os índices correspondentes do dataframe que satisfazem a condição booleana passada como argumento, pandas.DataFrame.index()
é a forma mais fácil de o conseguir.
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.randint(1, 20, size=(20, 4)), columns=list("ABCD"))
print(df.index[df["B"] == 19].tolist())
No trecho acima, as linhas da coluna A
que correspondem à condição booleana == 1
são devolvidas como saída, como se mostra abaixo.
Resultado:
[6, 9]
A razão pela qual colocamos tolist()
atrás do método index()
é para converter o Index
para a lista; caso contrário, o resultado é do tipo de dados Int64Index
.
Int64Index([6, 9], dtype='int64'
A recuperação apenas dos índices também pode ser feita com base em múltiplas condições. O trecho pode ser escrito da seguinte forma:
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.randint(1, 20, size=(20, 4)), columns=list("ABCD"))
print(df.index[(df["B"] == 19) | (df["C"] == 19)].tolist())
Resultado:
[6, 9, 14]
Obter Índices de Linhas contendo Strings em Pandas
Os valores das strings podem ser combinados com base em dois métodos. Ambos os métodos mostrados na secção anterior funcionarão, excepto no que diz respeito à alteração da condição.
Nos exemplos que se seguem, utilizaremos o seguinte trecho.
import pandas as pd
df = pd.DataFrame(
{
"Name": ["blue", "delta", "echo", "charlie", "alpha"],
"Type": ["Raptors", "Raptors", "Raptors", "Raptors", "Tyrannosaurus rex"],
}
)
print(df)
Resultado:
Name Type
0 blue Raptors
1 delta Raptors
2 echo Raptors
3 charlie Raptors
4 alpha Tyrannosaurus rex
Obter Índice de Linhas com a Correspondência Exacta da String
A condição de igualdade utilizada na secção anterior pode ser utilizada para encontrar a correspondência exacta da string no Dataframe. Iremos procurar as duas strings.
import pandas as pd
df = pd.DataFrame(
{
"Name": ["blue", "delta", "echo", "charlie", "alpha"],
"Type": ["Raptors", "Raptors", "Raptors", "Raptors", "Tyrannosaurus rex"],
}
)
print(df.index[(df["Name"] == "blue")].tolist())
print("\n")
print(df.loc[df["Name"] == "blue"])
print("\n")
print(df.loc[(df["Name"] == "charlie") & (df["Type"] == "Raptors")])
Resultado:
[0]
Name Type
0 blue Raptors
Name Type
3 charlie Raptors
Como se viu acima, tanto o índice como as linhas que coincidem com a condição podem ser recebidos.
Obter o Índice de Linhas com a Correspondência Parcial de Strings
Os valores das strings podem ser parcialmente combinados encadeando o quadro de dados com a função str.contains
. No exemplo seguinte, vamos procurar a string ha
em charlie e alpha*.
import pandas as pd
df = pd.DataFrame(
{
"Name": ["blue", "delta", "echo", "charlie", "alpha"],
"Type": ["Raptors", "Raptors", "Raptors", "Raptors", "Tyrannosaurus rex"],
}
)
print(df.index[df["Name"].str.contains("ha")].tolist())
print("\n")
print(df.loc[df["Name"].str.contains("ha")])
print("\n")
print(df.loc[(df["Name"].str.contains("ha")) & (df["Type"].str.contains("Rex"))])
Resultado:
[3, 4]
Name Type
3 charlie Raptors
4 alpha Tyrannosaurus rex
Name Type
4 alpha Tyrannosaurus rex
Esta função pode ser muito útil na execução de uma correspondência parcial de string através de múltiplas colunas do dataframe.
Artigo 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 filtrar linhas de dados com base nos valores das colunas 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