Pandas loc vs iloc

Suraj Joshi 30 janeiro 2023
  1. Selecione um valor particular em DataFrame, especificando índice e rótulo de coluna usando o método .loc()
  2. Selecione Colunas Particulares do DataFrame usando o método .loc()
  3. Filtrar linhas aplicando condição às colunas usando o método .loc()
  4. Filtrar linhas com índices usando iloc
  5. Filtrar linhas e colunas específicas do DataFrame
  6. Filtrar intervalo de linhas e colunas do DataFrame usando iloc
  7. Pandas loc vs iloc
Pandas loc vs iloc

Este tutorial explica como podemos filtrar dados de um Pandas DataFrame usando loc e iloc em Python. Para filtrar entradas do DataFrame usando iloc, usamos o índice inteiro para linhas e colunas, e para filtrar entradas do DataFrame usando loc, usamos nomes de linhas e colunas.

Para demonstrar a filtragem de dados usando loc, usaremos o DataFrame descrito no exemplo a seguir.

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)

print(student_df)

Resultado:

        Name  Age      City Grade
501    Alice   17  New York     A
502   Steven   20  Portland    B-
503  Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

Selecione um valor particular em DataFrame, especificando índice e rótulo de coluna usando o método .loc()

Podemos passar um rótulo de índice e rótulo de coluna como um argumento para o método .loc() para extrair o valor correspondente ao índice e rótulo de coluna fornecidos.

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)
print("The DataFrame of students with marks is:")
print(student_df)
print("")
print("The Grade of student with Roll No. 504 is:")
value = student_df.loc[504, "Grade"]
print(value)

Resultado:

The DataFrame of students with marks is:
        Name  Age      City Grade
501    Alice   17  New York     A
502   Steven   20  Portland    B-
503  Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

The Grade of student with Roll No. 504 is:
A-

Ele seleciona o valor no DataFrame com rótulo de índice como 504 e rótulo de coluna Grade. O primeiro argumento para o método .loc() representa o nome do índice, enquanto o segundo argumento se refere ao nome da coluna.

Selecione Colunas Particulares do DataFrame usando o método .loc()

Também podemos filtrar as colunas necessárias do DataFrame usando o método .loc(). Passamos a lista de nomes de coluna obrigatórios como um segundo argumento para o método .loc() para filtrar as colunas especificadas.

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)

print("The DataFrame of students with marks is:")
print(student_df)
print("")
print("The name and age of students in the DataFrame are:")
value = student_df.loc[:, ["Name", "Age"]]
print(value)

Resultado:

The DataFrame of students with marks is:
        Name Age      City Grade
501    Alice   17 New York     A
502   Steven   20 Portland    B-
503 Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

The name and age of students in the DataFrame are:
        Name Age
501    Alice   17
502   Steven   20
503 Neesham   18
504    Chris   21
505    Alice   15

O primeiro argumento para .loc() é :, que denota todas as linhas no DataFrame. Da mesma forma, passamos ["Name", "Age"] como o segundo argumento para o método .loc() que representa a seleção apenas das colunas Name e Age do DataFrame.

Filtrar linhas aplicando condição às colunas usando o método .loc()

Também podemos filtrar linhas que satisfaçam a condição especificada para valores de coluna usando o método .loc().

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)

print("The DataFrame of students with marks is:")
print(student_df)
print("")
print("Students with Grade A are:")
value = student_df.loc[student_df.Grade == "A"]
print(value)

Resultado:

The DataFrame of students with marks is:
        Name Age      City Grade
501    Alice   17 New York     A
502   Steven   20 Portland    B-
503 Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

Students with Grade A are:
      Name Age      City Grade
501 Alice   17 New York     A
505 Alice   15    Austin     A

Ele seleciona todos os alunos no DataFrame com nota A.

Filtrar linhas com índices usando iloc

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)

print("The DataFrame of students with marks is:")
print(student_df)
print("")
print("2nd and 3rd rows in the DataFrame:")
filtered_rows = student_df.iloc[[1, 2]]
print(filtered_rows)

Resultado:

The DataFrame of students with marks is:
        Name  Age      City Grade
501    Alice   17  New York     A
502   Steven   20  Portland    B-
503  Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

2nd and 3rd rows in the DataFrame:
        Name  Age      City Grade
502   Steven   20  Portland    B-
503  Neesham   18    Boston    B+

Ele filtra a segunda e a terceira linhas do DataFrame.

Passamos o índice inteiro das linhas como um argumento para o método iloc para filtrar as linhas do DataFrame. Aqui, o índice inteiro para a segunda e terceira linhas são 1 e 2 respectivamente, já que o índice começa em 0.

Filtrar linhas e colunas específicas do DataFrame

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)

print("The DataFrame of students with marks is:")
print(student_df)
print("")
print("Filtered values from the DataFrame:")
filtered_values = student_df.iloc[[1, 2, 3], [0, 3]]
print(filtered_values)

Resultado:

The DataFrame of students with marks is:
        Name  Age      City Grade
501    Alice   17  New York     A
502   Steven   20  Portland    B-
503  Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

Filtered values from the DataFrame:
        Name Grade
502   Steven    B-
503  Neesham    B+
504    Chris    A-

Ele filtra a primeira e a última coluna, ou seja, Name e Grade da segunda, terceira e quarta linhas do DataFrame. Passamos a lista com índices inteiros da linha como primeiro argumento e a lista com índices inteiros da coluna como segundo argumento para o método iloc.

Filtrar intervalo de linhas e colunas do DataFrame usando iloc

Para filtrar o intervalo de linhas e colunas, podemos usar a divisão de lista e passar as fatias para cada linha e coluna como um argumento para o método iloc.

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)

print("The DataFrame of students with marks is:")
print(student_df)
print("")
print("Filtered values from the DataFrame:")
filtered_values = student_df.iloc[1:4, 0:2]
print(filtered_values)

Resultado:

The DataFrame of students with marks is:
        Name  Age      City Grade
501    Alice   17  New York     A
502   Steven   20  Portland    B-
503  Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

Filtered values from the DataFrame:
        Name  Age
502   Steven   20
503  Neesham   18
504    Chris   21

Ele seleciona a segunda, terceira e quarta linhas e a primeira e a segunda colunas do DataFrame. 1:4 representa as linhas com um índice variando de 1 a 3 e 4 é exclusivo no intervalo. Da mesma forma, 0:2 representa colunas com um índice variando de 0 a 1.

Pandas loc vs iloc

Para filtrar as linhas e colunas do DataFrame usando loc(), precisamos passar o nome das linhas e colunas a serem filtradas. Da mesma forma, precisamos passar os índices inteiros de linhas e colunas a serem filtrados para filtrar os valores usando iloc().

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)

print("The DataFrame of students with marks is:")
print(student_df)
print("")
print("Filtered values from the DataFrame using loc:")
iloc_filtered_values = student_df.loc[[502, 503, 504], ["Name", "Age"]]
print(iloc_filtered_values)
print("")
print("Filtered values from the DataFrame using iloc:")
iloc_filtered_values = student_df.iloc[[1, 2, 3], [0, 3]]
print(iloc_filtered_values)
The DataFrame of students with marks is:
        Name  Age      City Grade
501    Alice   17  New York     A
502   Steven   20  Portland    B-
503  Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

Filtered values from the DataFrame using loc:
        Name  Age
502   Steven   20
503  Neesham   18
504    Chris   21

Filtered values from the DataFrame using iloc:
        Name Grade
502   Steven    B-
503  Neesham    B+
504    Chris    A-

Ele mostra como podemos filtrar os mesmos valores do DataFrame usando loc e iloc.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Artigo relacionado - Pandas Filter