Ce face value_counts()
value_counts() pe o coloană returnează un Series: indexul conține valorile distincte, iar valorile sunt numărul de apariții, de la cea mai frecventă la cea mai rară. E modul obișnuit de a vedea distribuția unei coloane de categorii (orașe, produse, note).
Cu normalize=True primești proporții (între 0 și 1) în loc de numere. Valorile lipsă nu sunt numărate implicit; cu dropna=False apar și ele, pe un rând separat.
Pe un DataFrame (din pandas 1.1), metoda numără combinațiile de valori de pe rânduri; cu subset alegi coloanele. Rezultatul are un index pe mai multe niveluri.
Parametri
| Parametru | Descriere |
|---|---|
normalize |
Dacă True, returnează proporții în loc de numere. |
sort |
Dacă sortează după frecvență (implicit True). Cu False păstrează ordinea primei apariții. |
ascending |
Dacă sortează crescător (de la cea mai rară). |
bins |
Doar la Series numeric: împarte valorile în atâtea intervale și numără pe intervale. |
dropna |
Dacă lasă deoparte valorile lipsă (implicit True). |
subset |
Doar la DataFrame: coloanele ale căror combinații se numără. |
Ce returnează
Un Series cu numărul (sau proporția) aparițiilor, numit count (sau proportion).
Exemple
Exemplul 1: Câte comenzi pe fiecare oraș
import pandas as pd
orase = pd.Series(["Iași", "Cluj", "Iași", "Brașov", "Iași", "Cluj"], name="oraș")
print(orase.value_counts())
print(orase.value_counts(ascending=True))
Rezultat
oraș
Iași 3
Cluj 2
Brașov 1
Name: count, dtype: int64
oraș
Brașov 1
Cluj 2
Iași 3
Name: count, dtype: int64
Exemplul 2: Proporții și valori lipsă
Proporțiile se calculează doar din cele 7 note completate: 3 note de 10 din 7 înseamnă aproximativ 0.43. Cu dropna=False apare și valoarea lipsă.
import pandas as pd
note = pd.Series([10, 9, 10, 8, 9, 10, 7, None])
print(note.value_counts(normalize=True))
print(note.value_counts(dropna=False))
Rezultat
10.0 0.428571
9.0 0.285714
8.0 0.142857
7.0 0.142857
Name: proportion, dtype: float64
10.0 3
9.0 2
8.0 1
7.0 1
NaN 1
Name: count, dtype: int64
Exemplul 3: Combinații de coloane pe un DataFrame
Fiecare pereche (oraș, produs) este numărată o dată pentru fiecare rând pe care apare.
import pandas as pd
comenzi = pd.DataFrame({
"oraș": ["Iași", "Cluj", "Iași", "Iași", "Cluj"],
"produs": ["carte", "carte", "pix", "carte", "pix"],
"preț": [45, 50, 3, 45, 4],
})
print(comenzi.value_counts(subset=["oraș", "produs"]))
Rezultat
oraș produs
Iași carte 2
Cluj carte 1
Iași pix 1
Cluj pix 1
Name: count, dtype: int64
Greșeli frecvente
- Te miri că numărul total este mai mic decât numărul de rânduri. Valorile lipsă nu sunt numărate implicit; adaugă
dropna=False. - Scrii
IașișiiasisauIași(cu spațiu la final) în date: apar ca valori diferite. Curăță textul înainte (str.strip(),str.lower()). - Cauți coloana cu numărul în rezultat ca într-un tabel. Rezultatul este un
Series; pentru tabel folosește.reset_index().
Comenzi înrudite
unique() / nunique(): unique returnează valorile distincte dintr-o coloană, în ordinea apariției; nunique spune câte valori distincte sunt.DataFrame.groupby(): Împarte tabelul în grupuri după una sau mai multe coloane, ca să calculezi totaluri, medii sau numărări pentru fiecare grup.describe(): Calculează statistici rapide pe coloane: număr, medie, abatere standard, minim, cuartile, maxim; pentru text, valori unice și cea mai frecventă.isna() / notna(): Arată care valori lipsesc (NaN, None, NaT) dintr-un tabel; cu isna().sum() afli câte lipsesc în fiecare coloană.