Pandas & NumPy Academy · Lezione

Operazioni vettorializzate sulle Series

Esegua operazioni aritmetiche tra due Series, gestisca automaticamente l'allineamento degli indici e sostituisca con NaN i valori allineati mancanti.

Lezione 3 di 413 passaggi

Operazioni vettorializzate sulle Series è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 3 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.

Perché usare le operazioni vettorializzate?

Come NumPy, le Series Pandas supportano operazioni vettorializzate che applicano operazioni aritmetiche, confronti e funzioni a ogni elemento senza ricorrere a cicli Python. Questo garantisce concisione e velocità. Internamente, ogni operazione delega l'elaborazione alle routine a livello C di NumPy, ma Pandas aggiunge un vantaggio fondamentale: l'allineamento automatico degli indici prima di eseguire l'operazione.

import pandas as pd

revenue = pd.Series([1000, 2000, 1500], index=['Jan', 'Feb', 'Mar'])
tax_rate = 0.2
net = revenue * (1 - tax_rate)   # vectorized -- no loop
print(net)

Operazioni aritmetiche tra due Series

Quando si sommano, sottraggono, moltiplicano o dividono due Series, Pandas le allinea prima in base all'etichetta di indice. Solo le posizioni in cui entrambe le Series hanno un'etichetta producono un risultato; alle etichette non corrispondenti viene assegnato NaN. Questo comportamento previene gli errori nascosti dovuti a dati non allineati, ad esempio quando si sommano i dati di gennaio provenienti da due fonti memorizzate in ordini diversi.

import pandas as pd

a = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
b = pd.Series([1, 2, 3], index=['y', 'z', 'w'])

print(a + b)
# w     NaN
# x     NaN
# y    21.0
# z    32.0

Riempire i NaN nelle operazioni con allineamento

Per evitare la propagazione di NaN nelle operazioni con dati non allineati, usi i metodi aritmetici come .add(), .sub(), .mul() e .div() con il parametro fill_value=. Questo sostituisce con un valore specificato ogni etichetta assente in una delle Series prima di eseguire l'operazione: generalmente 0 per l'addizione e 1 per la moltiplicazione.

import pandas as pd

a = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
b = pd.Series([1, 2, 3], index=['y', 'z', 'w'])

result = a.add(b, fill_value=0)
print(result)
# w     3.0
# x    10.0
# y    21.0
# z    32.0

Aritmetica scalare su una Series

L'aritmetica con uno scalare applica l'operazione a ogni elemento e produce una nuova Series con lo stesso indice. È la forma più semplice di vettorializzazione: s + 5, s * 100, s ** 2. L'aritmetica scalare non introduce mai NaN e viene usata per la conversione delle unità, la normalizzazione e l'applicazione di offset alle serie temporali.

import pandas as pd

prices_eur = pd.Series([1.0, 2.5, 4.0], index=['a', 'b', 'c'])
exchange = 1.08
prices_usd = prices_eur * exchange
print(prices_usd.round(2))
# a    1.08
# b    2.70
# c    4.32

Applicare le ufunc di NumPy alle Series

Le ufunc di NumPy funzionano perfettamente sulle Series Pandas e restituiscono una Series con lo stesso indice. Ciò significa che può chiamare direttamente np.sqrt(s), np.log1p(s) o np.exp(s) su una Series senza prima convertirla in un array. Il risultato è una nuova Series che conserva le etichette originali.

import pandas as pd
import numpy as np

s = pd.Series([0, 1, 4, 9, 16], index=list('abcde'))
print(np.sqrt(s))
# a    0.0
# b    1.0
# c    2.0
# d    3.0
# e    4.0

Operazioni di confronto sulle Series

Gli operatori di confronto (==, !=, >, <, >=, <=) restituiscono elemento per elemento una Series booleana. Sono gli elementi fondamentali del filtraggio: passi la Series booleana a .loc per selezionare le righe corrispondenti. Pandas esegue inoltre l'allineamento in base all'indice quando confronta due Series.

import pandas as pd

s = pd.Series([3, 7, 2, 9, 1], index=list('abcde'))
print(s > 4)
# a    False
# b     True
# c    False
# d     True
# e    False
print(s[s > 4])  # b:7  d:9

Combinare operazioni vettorializzate

Poiché ogni operazione restituisce una nuova Series, è possibile concatenare più trasformazioni in un'unica espressione. Il codice risulta leggibile e non richiede la creazione di variabili intermedie non necessarie. Per pipeline complesse, suddivida la catena su più righe usando le parentesi. La concatenazione è l'equivalente Pandas della programmazione funzionale con dati immutabili.

import pandas as pd
import numpy as np

raw_scores = pd.Series([55, 80, 45, 90, 72])
normalised = (raw_scores - raw_scores.min()) / (raw_scores.max() - raw_scores.min())
print(normalised.round(2))
# 0    0.22
# 1    0.78
# 2    0.00
# 3    1.00
# 4    0.60

Gestire i NaN nelle operazioni vettorializzate

NaN è contagioso: qualsiasi operazione aritmetica che coinvolga NaN produce NaN. Usi s.fillna(value) per sostituirlo prima dell'operazione oppure il parametro skipna=True nei metodi di aggregazione. La funzione pd.isna(s) restituisce una Series booleana che segnala le posizioni contenenti NaN: la usi per verificare i dati prima di calcolare le statistiche.

import pandas as pd
import numpy as np

s = pd.Series([1.0, np.nan, 3.0, np.nan, 5.0])
print(s + 10)
# 0    11.0  2    13.0  4    15.0 -- NaN stays NaN

print(s.fillna(0) + 10)
# 0    11.0  1    10.0  2    13.0  3    10.0  4    15.0

abs(), clip() e round() sulle Series

Le Series Pandas espongono direttamente molti metodi simili a quelli di NumPy: s.abs(), s.clip(lower, upper) e s.round(decimals) restituiscono tutti nuove Series con la trasformazione applicata elemento per elemento. Sono equivalenti alle chiamate alle ufunc di NumPy, ma usano la sintassi dei metodi e conservano l'indice e il nome della Series.

import pandas as pd

s = pd.Series([-2.5, 1.3, -0.7, 4.9, -3.1])
print(s.abs())          # [2.5 1.3 0.7 4.9 3.1]
print(s.clip(-2, 2))    # [-2.  1.3 -0.7  2. -2. ]
print(s.round(0))       # [-2.  1.  -1.   5.  -3.]

pct_change() per i tassi di crescita

s.pct_change() calcola la variazione percentuale tra elementi consecutivi: (corrente - precedente) / precedente. Il primo elemento è NaN perché non esiste un valore precedente. È l'operazione standard per calcolare i tassi di crescita mese su mese, i rendimenti giornalieri in finanza e le feature di variazione per i modelli di serie temporali.

import pandas as pd

monthly_revenue = pd.Series([100, 120, 110, 140],
                            index=['Q1', 'Q2', 'Q3', 'Q4'])
growth = monthly_revenue.pct_change()
print(growth.round(3))
# Q1      NaN
# Q2    0.200
# Q3   -0.083
# Q4    0.273

cumsum() e cumprod() sulle Series

s.cumsum() restituisce una Series dei totali progressivi, mentre s.cumprod() restituisce i prodotti progressivi. Vengono usati per calcolare ricavi cumulativi, rendimenti composti degli investimenti o conteggi progressivi delle parole. Conservano le etichette dell'indice originale, facilitando la rappresentazione della serie cumulativa nel tempo o per categoria.

import pandas as pd

daily_sales = pd.Series([100, 150, 80, 200],
                        index=['Mon', 'Tue', 'Wed', 'Thu'])
print(daily_sales.cumsum())
# Mon    100
# Tue    250
# Wed    330
# Thu    530

Verifica rapida

Verifichi la Sua comprensione delle operazioni vettorializzate sulle Series presentate in questa lezione.

Riepilogo della lezione

In questa lezione ha imparato che: gli operatori aritmetici si applicano elemento per elemento alle Series senza usare cicli, Pandas allinea automaticamente due Series in base all'etichetta di indice prima di eseguire l'operazione, inserendo NaN nelle posizioni non corrispondenti e metodi come fill_value, pct_change e cumsum estendono le operazioni vettorializzate per le attività analitiche. Ora esamineremo metodi utili delle Series, come describe, value_counts e map, per ottenere rapidamente riepiloghi.

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 «Operazioni vettorializzate sulle Series» è gratuita?

Sì — il testo completo di «Operazioni vettorializzate sulle 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 «Operazioni vettorializzate sulle Series»?

Esegua operazioni aritmetiche tra due Series, gestisca automaticamente l'allineamento degli indici e sostituisca con NaN i valori allineati mancanti. 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 3 di 4.

Quanto tempo richiede la lezione «Operazioni vettorializzate sulle 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