DataFrame.loc în pandas

Selectează rânduri și coloane după etichete (numele din index și numele coloanelor) și permite modificarea valorilor.

Sintaxă
df.loc[randuri, coloane]

Ce face DataFrame.loc

loc alege date după etichete: eticheta rândului din index și numele coloanei. Scrii între paranteze drepte mai întâi rândurile, apoi, după virgulă, coloanele: df.loc["Ana", "nota"]. Pentru fiecare parte poți da o etichetă, o listă de etichete, un interval (slice) sau o mască booleană.

Spre deosebire de slice-urile din Python, un interval cu loc include și capătul din dreapta: df.loc["Ana":"Ioana"] conține și rândul „Ioana”. Dacă indexul este cel implicit (0, 1, 2, …), df.loc[0:2] dă trei rânduri, pentru că 0, 1 și 2 sunt etichete.

loc este și modul corect de a modifica valori: df.loc[masca, "coloana"] = valoare. Dacă coloana nu există, este creată, iar rândurile neatinse primesc valoare lipsă (NaN).

Parametri

Parametru Descriere
randuri O etichetă ("Ana"), o listă (["Ana", "Mihai"]), un interval ("Ana":"Ioana"), o mască booleană sau : pentru toate rândurile.
coloane Opțional. Un nume de coloană, o listă de nume sau un interval de coloane. Lipsește = toate coloanele.

Ce returnează

O valoare (pentru o etichetă de rând și una de coloană), un Series (pentru un singur rând sau o singură coloană) sau un DataFrame (pentru liste și intervale).

Exemple

Exemplul 1: Un rând, o valoare, mai multe rânduri și coloane

Indexul este format din nume, deci rândurile se aleg după nume. O listă de rânduri și o listă de coloane dau un tabel mai mic.

import pandas as pd

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

print(df.loc["Ana"])
print()
print(df.loc["Mihai", "nota"])
print()
print(df.loc[["Ana", "Andrei"], ["nota"]])

Rezultat

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

7.0

        nota
Ana      9.5
Andrei   6.0

Exemplul 2: Intervalul include capătul din dreapta

"Mihai":"Andrei" dă trei rânduri, inclusiv „Andrei”. Cu indexul implicit, loc[0:2] dă tot trei rânduri.

import pandas as pd

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

simplu = df.reset_index(names="nume")
print(simplu.loc[0:2, ["nume", "nota"]])

Rezultat

Mihai     7.0
Ioana     8.5
Andrei    6.0
Name: nota, dtype: float64

    nume  nota
0    Ana   9.5
1  Mihai   7.0
2  Ioana   8.5

Exemplul 3: Modificarea valorilor cu loc și o mască

Elevii cu nota cel puțin 8.5 primesc „da” în coloana nouă bursa. Ceilalți rămân cu valoare lipsă, pe care o completăm apoi cu „nu”.

import pandas as pd

df = pd.DataFrame(
    {"nume": ["Ana", "Mihai", "Ioana", "Andrei"], "nota": [9.5, 7.0, 8.5, 6.0]}
)

df.loc[df["nota"] >= 8.5, "bursa"] = "da"
print(df)
print()

df["bursa"] = df["bursa"].fillna("nu")
df.loc[df["nume"] == "Andrei", "nota"] = 6.5
print(df)

Rezultat

     nume  nota bursa
0     Ana   9.5    da
1   Mihai   7.0   NaN
2   Ioana   8.5    da
3  Andrei   6.0   NaN

     nume  nota bursa
0     Ana   9.5    da
1   Mihai   7.0    nu
2   Ioana   8.5    da
3  Andrei   6.5    nu

Greșeli frecvente

  • Atribuiri înlănțuite ca df["nota"][0] = 10 sau df[df["nota"] > 8]["bursa"] = "da". În pandas 3 (Copy-on-Write) ele modifică o copie, iar tabelul original rămâne neschimbat. Scrie totul într-un singur df.loc[rânduri, coloană] = valoare.
  • Folosești loc cu poziții când indexul nu mai este 0, 1, 2, … (de exemplu după o sortare sau o filtrare). df.loc[0] caută eticheta 0, nu primul rând. Pentru poziții folosește iloc.
  • Uiți că intervalul este inclusiv și primești un rând în plus față de iloc sau față de slice-urile din Python.
  • Ceri o etichetă care nu există: df.loc["Elena"] aruncă KeyError.

Comenzi înrudite

  • DataFrame.iloc: Selectează rânduri și coloane după poziție (0, 1, 2, …), ca la listele Python, cu interval care exclude capătul din dreapta.
  • DataFrame.at și DataFrame.iat: Citesc sau modifică o singură valoare din tabel: at după etichete, iat după poziții.
  • Filtrare cu condiții (boolean indexing): Păstrează doar rândurile care îndeplinesc o condiție, cu operatorii &, |, ~ pentru condiții compuse și Series.between pentru intervale.
  • DataFrame.set_index() / reset_index(): set_index face dintr-o coloană indexul rândurilor; reset_index mută indexul înapoi într-o coloană sau îl renumerotează.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: DataFrame.loc

Ai o nelămurire despre utilizarea comenzii DataFrame.loc sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.