Ce face pd.concat()
pd.concat() primește o listă de tabele sau serii și le lipește. Cu axis=0 (implicit) le pune unul sub altul: util când ai același tip de date în mai multe fișiere, de exemplu un CSV pe lună. Cu axis=1 le pune unul lângă altul, potrivind rândurile după index.
Indexul fiecărui tabel se păstrează, deci pot apărea etichete repetate (0, 1, 0, 1). ignore_index=True renumerotează rândurile de la 0. keys adaugă un nivel în index care spune din ce tabel vine fiecare rând.
Dacă tabelele au coloane diferite, implicit (join="outer") se păstrează toate coloanele, iar valorile care lipsesc devin NaN. Cu join="inner" rămân doar coloanele comune. concat a înlocuit vechea metodă DataFrame.append, eliminată în pandas 2.0.
Parametri
| Parametru | Descriere |
|---|---|
objs |
Lista (sau dicționarul) de DataFrame/Series de lipit. Cu un dicționar, cheile lui devin keys. |
axis |
0 (implicit): unul sub altul. 1: unul lângă altul. |
join |
"outer" (implicit) păstrează toate etichetele de pe cealaltă axă; "inner" doar pe cele comune. |
ignore_index |
Cu True rezultatul primește un index nou 0, 1, 2, … |
keys |
Etichete pentru fiecare tabel, puse ca nivel exterior în index (sau în coloane la axis=1). |
names |
Numele nivelurilor din indexul creat cu keys. |
verify_integrity |
Cu True dă eroare dacă rezultatul are etichete repetate în index. |
Ce returnează
Un DataFrame (sau o Series, dacă ai lipit doar serii pe axis=0).
Exemple
Exemplul 1: Două luni unul sub altul
Fără ignore_index, indexul ar fi 0, 1, 0, 1. Cu ignore_index=True rândurile sunt numerotate din nou de la 0 la 3.
import pandas as pd
ianuarie = pd.DataFrame({"vanzator": ["Ana", "Mihai"], "suma": [1200, 800]})
februarie = pd.DataFrame({"vanzator": ["Ana", "Ioana"], "suma": [950, 1100]})
print(pd.concat([ianuarie, februarie]))
print()
print(pd.concat([ianuarie, februarie], ignore_index=True))
Rezultat
vanzator suma
0 Ana 1200
1 Mihai 800
0 Ana 950
1 Ioana 1100
vanzator suma
0 Ana 1200
1 Mihai 800
2 Ana 950
3 Ioana 1100
Exemplul 2: keys: de unde vine fiecare rând
keys adaugă un nivel exterior în index. Cu .loc["feb"] extragi apoi doar rândurile din februarie.
import pandas as pd
ianuarie = pd.DataFrame({"vanzator": ["Ana", "Mihai"], "suma": [1200, 800]})
februarie = pd.DataFrame({"vanzator": ["Ana", "Ioana"], "suma": [950, 1100]})
total = pd.concat([ianuarie, februarie], keys=["ian", "feb"], names=["luna", "rand"])
print(total)
print()
print(total.loc["feb"])
Rezultat
vanzator suma
luna rand
ian 0 Ana 1200
1 Mihai 800
feb 0 Ana 950
1 Ioana 1100
vanzator suma
rand
0 Ana 950
1 Ioana 1100
Exemplul 3: Unul lângă altul (axis=1) și coloane diferite
Cu axis=1 rândurile se potrivesc după index: Radu nu are absențe, deci primește NaN. În a doua parte, tabelele au coloane diferite, iar join="inner" păstrează doar coloana comună.
import pandas as pd
note = pd.DataFrame({"nota": [9, 7, 10]}, index=["Ana", "Mihai", "Radu"])
absente = pd.DataFrame({"absente": [2, 5]}, index=["Ana", "Mihai"])
print(pd.concat([note, absente], axis=1))
print()
a = pd.DataFrame({"nume": ["Ana"], "oras": ["Iași"]})
b = pd.DataFrame({"nume": ["Dan"], "varsta": [30]})
print(pd.concat([a, b], ignore_index=True))
print()
print(pd.concat([a, b], join="inner", ignore_index=True))
Rezultat
nota absente
Ana 9 2.0
Mihai 7 5.0
Radu 10 NaN
nume oras varsta
0 Ana Iași NaN
1 Dan NaN 30.0
nume
0 Ana
1 Dan
Greșeli frecvente
- Dai tabelele ca argumente separate:
pd.concat(df1, df2). Primul argument trebuie să fie o listă:pd.concat([df1, df2]). - Folosești
df.append(alt_df)din tutoriale vechi: metoda a fost eliminată în pandas 2.0 și dăAttributeError. Foloseștepd.concat. - Adaugi rânduri unul câte unul cu
concatîntr-o buclă. Fiecare apel copiază tot tabelul; strânge datele într-o listă și apeleazăconcato singură dată la final. - Uiți de indexul repetat după lipire și
df.loc[0]întoarce mai multe rânduri. Foloseșteignore_index=True.
Comenzi înrudite
pd.merge(): Unește două tabele după o coloană comună (de exemplu id-ul clientului), ca un JOIN din SQL: inner, left, right sau outer.DataFrame.join(): Adaugă coloanele altui tabel potrivind rândurile după index, implicit păstrând toate rândurile tabelului din stânga.pd.read_csv(): Citește un fișier CSV (valori separate prin virgulă sau alt separator) într-un DataFrame.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.
Întrebări & Exemple de Cod:
pd.concat()Ai o nelămurire despre utilizarea comenzii
pd.concat()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.