Pandas & NumPy Academy · Lezione

Metodi utili delle Series

Usi describe(), value_counts(), unique() e map() per riepilogare e trasformare rapidamente una Series.

Lezione 4 di 413 passaggi

Metodi utili delle Series è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Pandas & NumPy Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Pandas & NumPy Academy include 4 lezioni in totale.

Riepilogo rapido con describe()

s.describe() genera un riepilogo statistico con una sola chiamata: conteggio, media, deviazione standard, minimo, 25° percentile (Q1), mediana (Q2), 75° percentile (Q3) e massimo. Per le Series di stringhe restituisce invece conteggio, valori distinti, valore più frequente e frequenza. È il modo più rapido per farsi un'idea della distribuzione di una colonna durante la prima esplorazione di un dataset.

import pandas as pd

ages = pd.Series([25, 32, 19, 45, 28, 31, 22, 40])
print(ages.describe())
# count     8.000000
# mean     30.250000
# std       8.406...
# min      19.000000
# 25%      24.250000
# 50%      29.500000
# 75%      34.750000
# max      45.000000

value_counts() per le tabelle di frequenza

s.value_counts() restituisce una nuova Series con i valori distinti come indice e il relativo numero di occorrenze come dati, ordinati in modo decrescente per conteggio. Passi normalize=True per ottenere proporzioni anziché conteggi assoluti. È la prima operazione da eseguire su una colonna categoriale per comprenderne la distribuzione.

import pandas as pd

colors = pd.Series(['red', 'blue', 'red', 'green', 'blue', 'red'])
print(colors.value_counts())
# red      3
# blue     2
# green    1
print(colors.value_counts(normalize=True).round(2))
# red      0.50  blue  0.33  green  0.17

unique() e nunique()

s.unique() restituisce un array NumPy dei valori distinti nell'ordine della loro prima occorrenza (a differenza di value_counts, che ordina per frequenza). s.nunique() restituisce come intero il numero di valori distinti: la cardinalità della colonna. Entrambi ignorano NaN per impostazione predefinita. Usi nunique(dropna=False) per conteggiare NaN come valore distinto.

import pandas as pd

s = pd.Series(['apple', 'banana', 'apple', 'cherry', 'banana'])
print(s.unique())    # ['apple' 'banana' 'cherry']
print(s.nunique())   # 3

map() per la trasformazione elemento per elemento

s.map() applica una funzione, un dizionario o un'altra Series a ogni elemento. Quando passa un dizionario, ogni valore viene sostituito con il valore corrispondente del dizionario, mentre i valori non presenti nel dizionario diventano NaN. Quando passa una funzione, questa viene applicata elemento per elemento. map è ideale per ricodificare le etichette categoriali o applicare tabelle di ricerca.

import pandas as pd

grades = pd.Series(['A', 'B', 'C', 'A', 'B'])
gpa = {'A': 4.0, 'B': 3.0, 'C': 2.0}
print(grades.map(gpa))
# 0    4.0
# 1    3.0
# 2    2.0
# 3    4.0
# 4    3.0

apply() per le funzioni personalizzate

s.apply(func) applica un callable Python a ogni elemento e raccoglie i risultati. A differenza di map(), è progettato per funzioni più complesse che possono restituire oggetti non scalari. Per semplici trasformazioni elemento per elemento, preferisca map() o un'espressione vettorializzata; usi apply() quando la logica è troppo complessa per essere vettorializzata direttamente.

import pandas as pd

sentences = pd.Series(['Hello world', 'Pandas is great', 'Data science'])
word_counts = sentences.apply(lambda x: len(x.split()))
print(word_counts)
# 0    2
# 1    3
# 2    2

sort_values() e sort_index()

s.sort_values() restituisce la Series ordinata in base ai valori dei dati in ordine crescente (passi ascending=False per l'ordine decrescente). s.sort_index() ordina in base alle etichette dell'indice. Per impostazione predefinita, nessuno dei due metodi modifica la Series originale. Passi inplace=True per modificarla sul posto (una scelta meno consigliata nel moderno codice Pandas che concatena le operazioni).

import pandas as pd

s = pd.Series([30, 10, 50, 20], index=['d', 'a', 'c', 'b'])
print(s.sort_values())
# a    10
# b    20
# d    30
# c    50
print(s.sort_index())
# a    10
# b    20
# c    50
# d    30

isin() per verificare l'appartenenza

s.isin(values) restituisce una Series booleana con valore True nei punti in cui l'elemento appartiene all'elenco o al set fornito. È più leggibile rispetto a usare più condizioni con | e significativamente più veloce per set di grandi dimensioni. Viene usato comunemente per filtrare le righe appartenenti a un gruppo specifico o per contrassegnare i record corrispondenti a un elenco di ricerca.

import pandas as pd

countries = pd.Series(['DE', 'US', 'FR', 'UK', 'US', 'DE'])
nordics = ['DE', 'FR']
print(countries.isin(nordics))
# 0     True  1    False  2     True  3    False  4    False  5     True
print(countries[countries.isin(nordics)])

between() per filtrare per intervallo

s.between(left, right, inclusive='both') restituisce una Series booleana con valore True nei punti in cui il valore rientra nell'intervallo [left, right]. Per impostazione predefinita, entrambi gli estremi sono inclusi. È più conciso rispetto a scrivere (s >= left) & (s <= right) e comunica chiaramente l'intento. È utile per filtrare intervalli numerici, come fasce d'età o fasce di prezzo.

import pandas as pd

scores = pd.Series([45, 72, 83, 91, 55, 68])
pass_mask = scores.between(60, 100)
print(pass_mask)
# 0    False  1    True  2    True  3    True  4    False  5    True
print(scores[pass_mask].values)  # [72 83 91 68]

head() e tail() per un'ispezione rapida

s.head(n) restituisce i primi n elementi (5 per impostazione predefinita) e s.tail(n) restituisce gli ultimi n. Questi metodi vengono usati continuamente durante l'esplorazione dei dati per dare un'occhiata all'inizio e alla fine di una Series lunga senza stampare migliaia di righe. Restituiscono una nuova Series (una porzione), quindi non modificano l'originale.

import pandas as pd

s = pd.Series(range(100))
print(s.head(3))
# 0    0
# 1    1
# 2    2
print(s.tail(3))
# 97    97
# 98    98
# 99    99

rename() per cambiare il nome

s.rename('new_name') restituisce una nuova Series con un attributo name diverso. Per rinominare le etichette dell'indice, passi un dict o una funzione: s.rename(index={'old': 'new'}). Rinominare è importante prima di combinare le Series in un DataFrame, perché il name della Series diventa l'intestazione della colonna. Rinomini sempre invece di riassegnare valori grezzi.

import pandas as pd

s = pd.Series([1, 2, 3], index=['a', 'b', 'c'], name='original')
renamed = s.rename('updated').rename(index={'a': 'x', 'b': 'y', 'c': 'z'})
print(renamed)
# x    1
# y    2
# z    3
# Name: updated

idxmin() e idxmax()

s.idxmin() restituisce l'etichetta dell'indice del valore minimo e s.idxmax() restituisce l'etichetta del valore massimo. È più utile di argmin/argmax quando l'indice contiene etichette significative, come date o nomi di prodotti: si ottiene l'identificatore effettivo, non solo un numero di posizione.

import pandas as pd

scores = pd.Series({'Alice': 88, 'Bob': 73, 'Carol': 95, 'Dan': 60})
print('Best:', scores.idxmax(), scores.max())   # Carol 95
print('Worst:', scores.idxmin(), scores.min())  # Dan   60

Verifica rapida

Verifichi la Sua comprensione dei metodi utili per le Series presentati in questa lezione.

Riepilogo della lezione

In questa lezione ha imparato che: describe() fornisce un riepilogo statistico con una sola chiamata, value_counts() crea una tabella delle frequenze dei valori univoci e map() traduce i valori usando un dict, mentre apply() esegue una funzione personalizzata su ogni elemento. Ora inizieremo a lavorare con i DataFrame, lo strumento bidimensionale fondamentale per l'analisi dei dati con Pandas.

Gratis per iniziare

Impara Python con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
30
Lezioni
120

Domande Frequenti

La lezione «Metodi utili delle Series» è gratuita?

Sì — il testo completo di «Metodi utili delle Series» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Pandas & NumPy Academy, passa a CoddyKit PRO. Il corso Pandas & NumPy Academy include 4 lezioni in totale.

Cosa imparerò in «Metodi utili delle Series»?

Usi describe(), value_counts(), unique() e map() per riepilogare e trasformare rapidamente una Series. Eserciti Pandas & NumPy Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Pandas & NumPy Academy?

Non è richiesta alcuna esperienza precedente. Pandas & NumPy Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Metodi utili delle Series»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Pandas & NumPy Academy?

Sì. Ogni lezione Pandas & NumPy Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Creazione di una Series
  2. Accesso basato su etichette e posizioni
  3. Operazioni vettorializzate sulle Series
  4. Metodi utili delle Series
← Torna a Pandas & NumPy Academy