DataFrame.iloc în pandas

Selectează rânduri și coloane după poziție (0, 1, 2, ...), ca la listele Python, cu interval care exclude capătul din dreapta.

Sintaxă
df.iloc[pozitii_randuri, pozitii_coloane]

Ce face DataFrame.iloc

iloc alege date după poziția lor în tabel, numărând de la 0, indiferent de etichetele din index. df.iloc[0] este primul rând, df.iloc[-1] ultimul, iar df.iloc[:, 0] prima coloană.

Intervalele se comportă ca la listele Python: df.iloc[0:2] dă rândurile de pe pozițiile 0 și 1, fără poziția 2. Poți da și liste de poziții: df.iloc[[0, 2], [1]].

Diferența față de loc se vede după o sortare: rândurile își păstrează etichetele, dar își schimbă pozițiile. iloc[0] dă rândul aflat acum primul, loc[0] dă rândul cu eticheta 0.

Parametri

Parametru Descriere
pozitii_randuri Un număr întreg (poate fi negativ), o listă de numere, un interval start:stop:pas sau o mască booleană ca listă/array.
pozitii_coloane Opțional. La fel, pentru coloane. Lipsește = toate coloanele.

Ce returnează

O valoare, un Series sau un DataFrame, după cât de mult alegi.

Exemple

Exemplul 1: Primul rând, ultimul rând, primele coloane

import pandas as pd

df = pd.DataFrame({
    "nume": ["Ana", "Mihai", "Ioana", "Andrei"],
    "oras": ["Iași", "Cluj", "Iași", "Brașov"],
    "nota": [9.5, 7.0, 8.5, 6.0],
})

print(df.iloc[0])
print()
print(df.iloc[-1, 2])
print()
print(df.iloc[0:2])
print()
print(df.iloc[[1, 3], 0:2])

Rezultat

nume     Ana
oras    Iași
nota     9.5
Name: 0, dtype: object

6.0

    nume  oras  nota
0    Ana  Iași   9.5
1  Mihai  Cluj   7.0

     nume    oras
1   Mihai    Cluj
3  Andrei  Brașov

Exemplul 2: iloc față de loc după sortare

După sortarea descrescătoare, pe poziția 0 se află Ana (eticheta 1), iar rândul cu eticheta 0 (Mihai) a ajuns ultimul. iloc urmează ordinea curentă, loc urmează eticheta.

import pandas as pd

df = pd.DataFrame({
    "nume": ["Mihai", "Ana", "Ioana"],
    "nota": [7.0, 9.5, 8.5],
})
sortat = df.sort_values("nota", ascending=False)
print(sortat)
print()
print("iloc[0]:", sortat.iloc[0]["nume"])
print("loc[0]: ", sortat.loc[0]["nume"])

Rezultat

    nume  nota
1    Ana   9.5
2  Ioana   8.5
0  Mihai   7.0

iloc[0]: Ana
loc[0]:  Mihai

Greșeli frecvente

  • Aștepți ca df.iloc[0:3] să includă poziția 3. Capătul din dreapta este exclus, ca la lista[0:3].
  • Dai nume de coloane: df.iloc[0, "nota"] aruncă eroare. iloc primește doar poziții; pentru nume folosește loc sau df.columns.get_loc("nota").
  • O poziție prea mare (df.iloc[10] pe un tabel cu 4 rânduri) aruncă IndexError. Un interval prea mare, în schimb, este tăiat fără eroare.

Comenzi înrudite

  • DataFrame.loc: Selectează rânduri și coloane după etichete (numele din index și numele coloanelor) și permite modificarea valorilor.
  • DataFrame.at și DataFrame.iat: Citesc sau modifică o singură valoare din tabel: at după etichete, iat după poziții.
  • head() / tail(): Afișează primele (head) sau ultimele (tail) n rânduri dintr-un DataFrame sau Series. Implicit 5.
  • DataFrame.sort_values() și sort_index(): Ordonează rândurile după valorile uneia sau mai multor coloane (sort_values) sau după etichetele din index (sort_index).