Ce face pd.cut()
pd.cut() transformă o coloană de numere într-o coloană de categorii. Dai limitele intervalelor în bins, de exemplu [0, 18, 30, 50, 100], iar fiecare valoare primește intervalul în care se află. Cu labels pui nume clare, ca „tânăr” sau „adult”.
Implicit intervalele sunt închise la dreapta: (18, 30] conține 30, dar nu 18. Cu right=False devin [18, 30). O valoare egală cu prima limită sau în afara limitelor primește valoare lipsă; include_lowest=True include prima limită.
Dacă bins este un număr (de exemplu 3), pandas împarte intervalul dintre minim și maxim în 3 bucăți de lungime egală. Pentru grupe cu același număr de valori folosește pd.qcut().
Parametri
| Parametru | Descriere |
|---|---|
x |
Valorile de împărțit: o listă sau o Series de numere. |
bins |
Lista limitelor sau numărul de intervale egale. |
labels |
Numele intervalelor (câte unul pentru fiecare interval) sau False pentru numere 0, 1, 2… |
right |
True (implicit): limita din dreapta face parte din interval. False: limita din stânga. |
include_lowest |
True: prima limită face parte din primul interval. |
Ce returnează
O Series de tip category (pentru o Series la intrare), cu categoriile în ordine.
Exemple
Exemplul 1: Grupe de vârstă cu etichete
import pandas as pd
clienti = pd.DataFrame({"nume": ["Ana", "Mihai", "Elena", "Ioana", "Radu"],
"varsta": [16, 25, 34, 52, 30]})
clienti["grupa"] = pd.cut(clienti["varsta"], bins=[0, 18, 30, 50, 100],
labels=["minor", "tânăr", "adult", "senior"])
print(clienti)
print(clienti["grupa"].value_counts(sort=False))
Rezultat
nume varsta grupa
0 Ana 16 minor
1 Mihai 25 tânăr
2 Elena 34 adult
3 Ioana 52 senior
4 Radu 30 tânăr
grupa
minor 1
tânăr 2
adult 1
senior 1
Name: count, dtype: int64
Exemplul 2: right=False pentru calificative
Cu right=False, nota 5 intră în [5, 7), adică „suficient”, iar 7 intră în intervalul următor.
import pandas as pd
note = pd.Series([4, 5, 6.5, 7, 9, 10])
calificativ = pd.cut(note, bins=[1, 5, 7, 9, 10.01], right=False,
labels=["insuficient", "suficient", "bine", "foarte bine"])
print(pd.DataFrame({"nota": note, "calificativ": calificativ}))
Rezultat
nota calificativ
0 4.0 insuficient
1 5.0 suficient
2 6.5 suficient
3 7.0 bine
4 9.0 foarte bine
5 10.0 foarte bine
Exemplul 3: Intervale egale cu bins=3
import pandas as pd
preturi = pd.Series([10, 25, 40, 55, 70, 90])
print(pd.cut(preturi, bins=3))
Rezultat
0 (9.92, 36.667]
1 (9.92, 36.667]
2 (36.667, 63.333]
3 (36.667, 63.333]
4 (63.333, 90.0]
5 (63.333, 90.0]
dtype: category
Categories (3, interval[float64, right]): [(9.92, 36.667] < (36.667, 63.333] <
(63.333, 90.0]]
Greșeli frecvente
- O valoare egală cu prima limită (de exemplu 0 în
bins=[0, 18, ...]) primeșteNaN, pentru că primul interval este(0, 18]. Adaugăinclude_lowest=True. - Dai un număr de etichete diferit de numărul de intervale. Cu 5 limite ai 4 intervale, deci 4 etichete; altfel apare
ValueError. - Te aștepți ca grupele să aibă număr egal de valori.
cutfolosește limitele tale; pentru grupe egale ca număr foloseșteqcut.
Comenzi înrudite
pd.qcut(): Împarte valorile în grupe cu același număr de elemente, după cuantile: q=4 dă cuartile, q=10 dă decile.value_counts(): Numără de câte ori apare fiecare valoare într-o coloană (sau fiecare combinație de valori pe rânduri), în ordine descrescătoare.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.astype() și pd.to_numeric(): Schimbă tipul unei coloane (int, float, category, str); pd.to_numeric transformă textul în numere și poate pune NaN la valorile greșite.