Ce face DataFrame.set_index() / reset_index()
set_index alege o coloană (sau mai multe) și o folosește ca etichete ale rândurilor. După asta poți căuta rânduri după valoare cu df.loc["Mihai"]. Implicit coloana dispare dintre coloanele obișnuite (drop=True).
reset_index face invers: indexul devine din nou o coloană, iar rândurile primesc numerele 0, 1, 2, …. Cu drop=True indexul vechi este aruncat; e util după o filtrare, când indexul are goluri (0, 2, 5).
Ambele returnează un tabel nou; tabelul inițial rămâne neschimbat. Salvează rezultatul: df = df.set_index("nume").
Parametri
| Parametru | Descriere |
|---|---|
keys |
La set_index: numele coloanei sau o listă de nume (rezultă un index pe mai multe niveluri, MultiIndex). |
drop |
La set_index: dacă scoate coloana dintre coloane (implicit True). La reset_index: dacă aruncă indexul în loc să-l facă coloană (implicit False). |
append |
La set_index: adaugă coloana la indexul existent în loc să-l înlocuiască. |
verify_integrity |
La set_index: verifica dacă noul index are valori repetate. Este depreciat în pandas 3.1; verifică direct cu rezultat.index.is_unique. |
level |
La reset_index: ce niveluri ale unui MultiIndex se mută în coloane (implicit toate). |
names |
La reset_index: numele noii coloane create din index. |
Ce returnează
Un DataFrame nou (sau None cu inplace=True, formă pe care e mai bine să o eviți).
Exemple
Exemplul 1: O coloană devine index
După set_index("nume"), rândul lui Mihai se găsește direct după nume.
import pandas as pd
df = pd.DataFrame({
"nume": ["Ana", "Mihai", "Ioana"],
"oraș": ["Iași", "Cluj", "Brașov"],
"salariu": [5200, 6100, 4800],
})
dupa_nume = df.set_index("nume")
print(dupa_nume)
print(dupa_nume.loc["Mihai"])
Rezultat
oraș salariu
nume
Ana Iași 5200
Mihai Cluj 6100
Ioana Brașov 4800
oraș Cluj
salariu 6100
Name: Mihai, dtype: object
Exemplul 2: reset_index după filtrare
Filtrarea păstrează etichetele vechi (1 și 3). reset_index(drop=True) renumerotează rândurile de la 0; fără drop=True, indexul vechi ar deveni o coloană numită index.
import pandas as pd
df = pd.DataFrame({
"produs": ["pâine", "cafea", "lapte", "ciocolată"],
"preț": [4.5, 32.0, 7.0, 9.5],
})
scumpe = df[df["preț"] > 8]
print(scumpe)
print(scumpe.reset_index(drop=True))
print(scumpe.reset_index())
Rezultat
produs preț
1 cafea 32.0
3 ciocolată 9.5
produs preț
0 cafea 32.0
1 ciocolată 9.5
index produs preț
0 1 cafea 32.0
1 3 ciocolată 9.5
Exemplul 3: Index pe două coloane și valori repetate
Cu o listă de coloane rezultă un MultiIndex. Un index poate avea valori repetate (Iași apare de două ori); index.is_unique îți spune dacă fiecare etichetă apare o singură dată.
import pandas as pd
df = pd.DataFrame({
"oraș": ["Iași", "Iași", "Cluj", "Cluj"],
"lună": ["ian", "feb", "ian", "feb"],
"vânzări": [1200, 1350, 1500, 1420],
})
pe_luni = df.set_index(["oraș", "lună"])
print(pe_luni)
print(pe_luni.loc[("Cluj", "feb"), "vânzări"])
dupa_oras = df.set_index("oraș")
print(dupa_oras.index.is_unique)
print(pe_luni.index.is_unique)
Rezultat
vânzări
oraș lună
Iași ian 1200
feb 1350
Cluj ian 1500
feb 1420
1420
False
True
Greșeli frecvente
- Apelezi
df.set_index("nume")și te aștepți cadfsă se schimbe. Metoda returnează un tabel nou; scriedf = df.set_index("nume"). - Cauți apoi coloana
df["nume"]și primeștiKeyError: dupăset_index,numenu mai e coloană, ci index. Foloseștedf.indexsaudrop=False. - Uiți
drop=Truelareset_indexși tabelul capătă o coloană în plus numităindex.
Comenzi înrudite
pd.DataFrame(): Creează un tabel cu rânduri și coloane, dintr-un dicționar de liste, dintr-o listă de dicționare sau dintr-o listă de liste.DataFrame.loc: Selectează rânduri și coloane după etichete (numele din index și numele coloanelor) și permite modificarea valorilor.DataFrame.groupby(): Împarte tabelul în grupuri după una sau mai multe coloane, ca să calculezi totaluri, medii sau numărări pentru fiecare grup.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).
Întrebări & Exemple de Cod:
DataFrame.set_index() / reset_index()Ai o nelămurire despre utilizarea comenzii
DataFrame.set_index() / reset_index()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.