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] = 10saudf[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 singurdf.loc[rânduri, coloană] = valoare. - Folosești
loccu 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șteiloc. - Uiți că intervalul este inclusiv și primești un rând în plus față de
ilocsau 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ă.
Întrebări & Exemple de Cod:
DataFrame.locAi o nelămurire despre utilizarea comenzii
DataFrame.locsau 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.