Ottieni l'indice delle righe la cui colonna corrisponde a un valore specifico in Pandas

Sathiya Sarathi 30 gennaio 2023
  1. Ottieni indici di righe contenenti numeri interi / galleggianti nei pandas
  2. Ottieni indici di righe contenenti stringhe in Pandas
Ottieni l'indice delle righe la cui colonna corrisponde a un valore specifico in Pandas

In questo articolo viene illustrato come ottenere l’indice delle righe che corrisponde a determinati criteri in Pandas.

La necessità di trovare gli indici delle righe è importante nell’ingegneria delle caratteristiche. Queste abilità possono essere utili per rimuovere i valori anomali o anomali in un Dataframe. Gli indici, noti anche come etichette di riga, possono essere trovati in Pandas utilizzando diverse funzioni. Nei seguenti esempi, lavoreremo sul dataframe creato utilizzando il seguente frammento.

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)

Produzione:

     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

Ottieni indici di righe contenenti numeri interi / galleggianti nei pandas

La funzione pandas.DataFrame.loc può accedere a righe e colonne tramite le sue etichette / nomi. È semplice restituire le righe che corrispondono alla condizione booleana data passata come etichetta. Notare le parentesi quadre accanto a df.loc nello 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])

Le righe corrispondenti alla condizione booleana vengono restituite come output nel formato di un Dataframe.

Produzione:

    A   B  C   D
6   1  19  4  18
9  12  19  3   1

È possibile concatenare e applicare più condizioni alla funzione, come mostrato di seguito. Questo aiuta a isolare le righe in base a condizioni specifiche.

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)])

Produzione:

     A   B   C   D
6    1  19   4  18
9   12  19   3   1
14  12  15  19   1

Ottieni indice di righe con pandas.DataFrame.index()

Se desideri trovare solo gli indici corrispondenti del dataframe che soddisfano la condizione booleana passata come argomento, pandas.DataFrame.index() è il modo più semplice per ottenerlo.

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())

Nello snippet di cui sopra, le righe della colonna A che corrispondono alla condizione booleana == 1 vengono restituite come output come mostrato di seguito.

Produzione:

[6, 9]

Il motivo per cui mettiamo tolist() dietro il metodo index() è convertire l’index() nella lista; in caso contrario, il risultato è del tipo di dati Int64Index.

Int64Index([6, 9], dtype='int64'

Il recupero solo degli indici può essere eseguito anche in base a più condizioni. Lo snippet può essere scritto come segue:

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())

Produzione:

[6, 9, 14]

Ottieni indici di righe contenenti stringhe in Pandas

I valori della stringa possono essere confrontati in base a due metodi. Entrambi i metodi mostrati nella sezione precedente funzioneranno, ad eccezione del cambio di condizione.

Nei seguenti esempi, useremo il seguente snippet.

import pandas as pd

df = pd.DataFrame(
    {
        "Name": ["blue", "delta", "echo", "charlie", "alpha"],
        "Type": ["Raptors", "Raptors", "Raptors", "Raptors", "Tyrannosaurus rex"],
    }
)

print(df)

Produzione:

      Name               Type
0     blue            Raptors
1    delta            Raptors
2     echo            Raptors
3  charlie            Raptors
4    alpha  Tyrannosaurus rex

Ottieni l’indice delle righe con la corrispondenza di stringa esatta

La condizione di uguaglianza utilizzata nella sezione precedente può essere utilizzata per trovare la corrispondenza esatta della stringa nel Dataframe. Cercheremo le due corde.

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")])

Produzione:

[0]

   Name     Type
0  blue  Raptors

      Name     Type
3  charlie  Raptors

Come visto sopra, è possibile ricevere sia l’indice che le righe corrispondenti alla condizione.

Ottieni indice di righe con la corrispondenza di stringa parziale

I valori della stringa possono essere parzialmente abbinati concatenando il dataframe alla funzione str.contains. Nell’esempio seguente, cercheremo la stringa ha in 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"))])

Produzione:

[3, 4]

      Name               Type
3  charlie            Raptors
4    alpha  Tyrannosaurus rex


    Name               Type
4  alpha  Tyrannosaurus rex

Questa funzione può essere molto utile per eseguire una corrispondenza parziale della stringa su più colonne del dataframe.

Articolo correlato - Pandas DataFrame

Articolo correlato - Pandas DataFrame Row