HOWTO · Pandas

Ottieni la prima riga di pandas dataframe

Impara a selezionare la prima riga di un DataFrame Pandas con iloc, head(), il filtraggio, query(), take() e lo slicing, e a scegliere tra un risultato Series e un risultato DataFrame.

In questa pagina

Usa df.iloc[0] per ottenere la prima riga come Series oppure df.head(1) per mantenerla come DataFrame di una sola riga. Per trovare la prima riga che soddisfa determinati criteri, filtra prima i dati e poi seleziona il primo risultato.

Gli esempi usano questo piccolo DataFrame per rendere facili da seguire i valori selezionati e le etichette originali delle righe. Ogni blocco di codice è autonomo e può essere eseguito in un ambiente Python con pandas installato; dopo ogni esempio è mostrato l’output osservato nell’esecuzione fornita.

Ottenere la prima riga di un DataFrame Pandas con la proprietà pandas.DataFrame.iloc

pandas.DataFrame.iloc seleziona righe e colonne in base alla posizione intera. La posizione 0 indica la prima riga, indipendentemente dall’etichetta del suo indice. Selezionando una riga con df.iloc[0] si ottiene una Series il cui indice contiene i nomi delle colonne del DataFrame. Usa df.iloc[0, 1] per selezionare un singolo valore alla posizione di riga 0 e alla posizione di colonna 1.

import pandas as pd

df = pd.DataFrame(
    {
        "C_1": ["A", "B", "C", "D"],
        "C_2": [40, 34, 38, 45],
        "C_3": [430, 980, 200, 350],
    }
)

first_row = df.iloc[0]
print(first_row)
C_1      A
C_2     40
C_3    430
Name: 0, dtype: object

Scegli questa forma quando una Series è comoda per i calcoli successivi o per accedere ai valori tramite il nome della colonna. Per mantenere la forma bidimensionale di un DataFrame, usa df.iloc[[0]] oppure uno dei metodi descritti di seguito.

Ottenere la prima riga di un DataFrame Pandas con il metodo pandas.DataFrame.head()

pandas.DataFrame.head(n) restituisce le prime n righe come DataFrame. Passa 1 per ottenere solo la prima riga, mantenendo la struttura delle colonne e l’etichetta del suo indice. È spesso la scelta più chiara quando il codice successivo si aspetta un DataFrame.

import pandas as pd

df = pd.DataFrame(
    {
        "C_1": ["A", "B", "C", "D"],
        "C_2": [40, 34, 38, 45],
        "C_3": [430, 980, 200, 350],
    }
)

first_row = df.head(1)
print(first_row)
  C_1  C_2  C_3
0   A   40  430

La scelta principale riguarda la forma del risultato: df.iloc[0] è unidimensionale, mentre df.head(1) restituisce ancora un DataFrame.

Ottenere la prima riga di un DataFrame Pandas che soddisfa una condizione specifica

Filtra le righe prima di selezionare la prima corrispondenza. In questo esempio, la condizione è C_2 < 40 e C_3 > 450; la prima riga corrispondente ha l’etichetta 1. La maschera booleana racchiude tra parentesi ciascun confronto perché & combina le due condizioni.

import pandas as pd

df = pd.DataFrame(
    {
        "C_1": ["A", "B", "C", "D"],
        "C_2": [40, 34, 38, 45],
        "C_3": [430, 980, 500, 350],
    }
)

matches = df[(df["C_2"] < 40) & (df["C_3"] > 450)]
first_match = matches.head(1)
print(first_match)
  C_1  C_2  C_3
1   B   34  980

Se nessuna riga corrisponde, head(1) restituisce un DataFrame vuoto. Se, quando esiste una corrispondenza, ti serve una singola Series, selezionala con matches.iloc[0]; controlla prima matches.empty quando è possibile che non ci siano corrispondenze.

Il metodo query() esprime lo stesso filtro come stringa e può risultare comodo per scrivere espressioni leggibili sulle colonne. Mantieni il predicato coerente con l’esempio di filtro booleano:

import pandas as pd

df = pd.DataFrame(
    {
        "C_1": ["A", "B", "C", "D"],
        "C_2": [40, 34, 38, 45],
        "C_3": [430, 980, 500, 350],
    }
)

matches = df.query("(C_2 < 40) & (C_3 > 450)")
first_match = matches.head(1)
print(first_match)
  C_1  C_2  C_3
1   B   34  980

Per usare valori provenienti da variabili Python, inserisci @variable in un’espressione query(). Per esempio, puoi fare riferimento a limit = 40 con df.query("C_2 < @limit").

Ottenere la prima riga di un DataFrame Pandas con il metodo pandas.DataFrame.take()

Con l’asse predefinito delle righe, pandas.DataFrame.take() seleziona righe in base alla posizione. Passa [0] per selezionare la prima riga come DataFrame di una sola riga, mantenendo la sua etichetta originale dell’indice.

import pandas as pd

df = pd.DataFrame(
    {
        "C_1": ["A", "B", "C", "D"],
        "C_2": [40, 34, 38, 45],
        "C_3": [430, 980, 200, 350],
    }
)

first_row = df.take([0])
print(first_row)
  C_1  C_2  C_3
0   A   40  430

Usa take() quando hai già un elenco di posizioni di riga. Per selezionare semplicemente la prima riga, head(1) o iloc[[0]] possono comunicare l’intento in modo più diretto.

Ottenere la prima riga di un DataFrame Pandas usando lo slicing

Lo slice df[:1] seleziona le righe dall’inizio fino alla posizione 1, esclusa. Restituisce un DataFrame e mantiene l’etichetta dell’indice della riga selezionata.

import pandas as pd

df = pd.DataFrame(
    {
        "C_1": ["A", "B", "C", "D"],
        "C_2": [40, 34, 38, 45],
        "C_3": [430, 980, 200, 350],
    }
)

first_row = df[:1]
print(first_row)
  C_1  C_2  C_3
0   A   40  430

Conclusione

Usa df.iloc[0] quando vuoi una Series e df.head(1), df.iloc[[0]], df.take([0]) o df[:1] quando vuoi un DataFrame di una sola riga. Per ottenere la prima riga che soddisfa determinati criteri, applica un filtro booleano o usa query() e poi seleziona la prima riga filtrata. Se è possibile che non ci siano corrispondenze, controlla matches.empty prima di indicizzare.