Accesso basato su etichette e posizioni
Recuperi gli elementi con .loc (etichetta) e .iloc (posizione intera) e comprenda la differenza tra i due metodi.
Accesso basato su etichette e posizioni è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 2 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.
Due modi per accedere agli elementi di una Series
Pandas fornisce due accessor principali per selezionare gli elementi di una Series: .loc per l'accesso basato sulle etichette e .iloc per l'accesso basato sulla posizione intera. Capire quale usare e quando è fondamentale: usare quello sbagliato con una Series indicizzata da interi produce risultati fuorvianti e Pandas 2.0 ha deprecato molti usi ambigui della notazione diretta con parentesi quadre.
import pandas as pd
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s.loc['b']) # 20 -- by label
print(s.iloc[1]) # 20 -- by position.loc: accesso basato sulle etichette
.loc accede agli elementi tramite la loro etichetta di indice. È possibile passare una singola etichetta (restituisce uno scalare), un elenco di etichette (restituisce una Series) oppure uno slice di etichette (inclusivo a entrambe le estremità, a differenza degli slice Python). Se l'etichetta non esiste, Pandas solleva un KeyError. Usi .loc quando le etichette hanno un significato (date, nomi, ID).
import pandas as pd
s = pd.Series([10, 20, 30, 40, 50],
index=['a', 'b', 'c', 'd', 'e'])
print(s.loc['c']) # 30
print(s.loc[['a', 'c']]) # a:10 c:30
print(s.loc['b':'d']) # b:20 c:30 d:40 -- inclusive.iloc: accesso basato sulla posizione
.iloc accede agli elementi tramite la loro posizione intera (a partire da 0), ignorando completamente le etichette di indice. Il comportamento è analogo all'indicizzazione delle liste Python: le posizioni negative si contano dalla fine e gli slice seguono la convenzione Python del limite finale esclusivo. Usi .iloc quando Le serve l'elemento in posizione n, indipendentemente dalla sua etichetta.
import pandas as pd
s = pd.Series([10, 20, 30, 40, 50],
index=['a', 'b', 'c', 'd', 'e'])
print(s.iloc[2]) # 30 -- third element
print(s.iloc[-1]) # 50 -- last element
print(s.iloc[1:4]) # b:20 c:30 d:40 -- exclusive stopQuando .loc e .iloc differiscono
La differenza è più importante nel caso delle Series con etichette intere. Se una Series ha le etichette di indice [5, 10, 15], s.loc[5] restituisce l'elemento con etichetta 5 (il primo elemento), mentre s.iloc[5] solleva un IndexError (gli elementi sono solo 3). Scelga sempre in base al fatto che intenda «l'elemento con etichetta X» oppure «l'elemento in posizione X».
import pandas as pd
s = pd.Series([100, 200, 300], index=[5, 10, 15])
print(s.loc[10]) # 200 -- element with label 10
print(s.iloc[1]) # 200 -- second element
# s.loc[1] would raise KeyError -- no label 1Selezionare più etichette con .loc
Passi un elenco a .loc per selezionare più elementi in qualsiasi ordine, anche con possibili ripetizioni. Il risultato è una nuova Series con le stesse etichette dell'elenco fornito. È simile al fancy indexing di NumPy, ma si basa sulle etichette di indice anziché sulle posizioni. Viene usato comunemente per riordinare o selezionare un sottoinsieme di colonne nelle pipeline analitiche.
import pandas as pd
s = pd.Series({'Jan': 100, 'Feb': 200, 'Mar': 300, 'Apr': 400})
# Select Q1 months in reverse order
print(s.loc[['Mar', 'Feb', 'Jan']])
# Mar 300
# Feb 200
# Jan 100Selezionare intervalli di etichette con .loc
A differenza degli slice Python, gli slice di .loc sono inclusivi a entrambe le estremità. s.loc['b':'d'] restituisce gli elementi con etichette b, c e d. Questo può sorprendere se si è abituati alla convenzione Python del limite finale esclusivo. Si assicuri che le etichette ai limiti dell'intervallo esistano effettivamente nell'indice, altrimenti lo slice potrebbe restituire risultati inattesi senza segnalare errori.
import pandas as pd
s = pd.Series(range(5), index=['a', 'b', 'c', 'd', 'e'])
print(s.loc['b':'d'])
# b 1
# c 2
# d 3
# dtype: int64
# Note: 'd' is INCLUDED (inclusive stop)Indicizzazione booleana con .loc
È possibile passare una Series booleana a .loc per filtrare gli elementi. La Series booleana deve avere lo stesso indice della Series di destinazione. È l'equivalente Pandas del mascheramento booleano di NumPy e supporta condizioni composte con & e |. È anche il metodo standard per filtrare le righe nei DataFrame.
import pandas as pd
s = pd.Series([3, 7, 2, 9, 1], index=['a', 'b', 'c', 'd', 'e'])
print(s.loc[s > 4])
# b 7
# d 9
# dtype: int64Impostare valori con .loc e .iloc
Sia .loc sia .iloc possono comparire sul lato sinistro di un'assegnazione per modificare i valori sul posto. Questo è il modello corretto: l'uso dell'indicizzazione concatenata, come s['a'] = 99, può attivare un SettingWithCopyWarning nei DataFrame. Per le Series, l'accesso diretto tramite etichetta è generalmente sicuro, ma .loc è esplicito e consigliato.
import pandas as pd
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
s.loc['b'] = 99
print(s)
# a 10
# b 99
# c 30Accesso con parentesi quadre a una Series
La notazione diretta con parentesi quadre s['label'] funziona per l'accesso tramite etichetta ed è equivalente a s.loc['label'] per gli indici stringa. Per gli indici interi il comportamento è ambiguo ed è stato modificato in Pandas 2.0: ora indica sempre un accesso tramite etichetta. Per maggiore chiarezza e per rendere il codice più a prova di futuro, usi sempre .loc o .iloc in modo esplicito invece di affidarsi alla disambiguazione delle parentesi quadre.
import pandas as pd
s = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
print(s['y']) # 20 -- label access via brackets
print(s.loc['y']) # 20 -- explicit and preferredAccedere agli elementi da un DatetimeIndex
Quando una Series ha un DatetimeIndex, .loc accetta stringhe con date parziali per selezionare comodamente un intervallo. s.loc['2023'] restituisce tutti gli elementi del 2023, mentre s.loc['2023-01':'2023-06'] restituisce la prima metà del 2023. Questa è una delle funzionalità più pratiche di Pandas per lavorare con le serie temporali.
import pandas as pd
dates = pd.date_range('2023-01-01', periods=5, freq='ME')
values = pd.Series([10, 20, 30, 40, 50], index=dates)
print(values.loc['2023-03':'2023-05'])
# 2023-03-31 30
# 2023-04-30 40
# 2023-05-31 50at e iat per accedere rapidamente a un singolo elemento
.at[label] e .iat[position] sono accessor scalari ottimizzati: sono più veloci di .loc e .iloc quando si accede a un singolo elemento all'interno di un ciclo stretto, perché evitano il sovraccarico dovuto alla restituzione di un oggetto Series. Non possono selezionare più elementi. Li usi quando Le serve il massimo delle prestazioni per ricerche ripetute di singoli elementi.
import pandas as pd
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s.at['b']) # 20 -- label scalar access
print(s.iat[2]) # 30 -- position scalar accessVerifica rapida
Verifichi la Sua comprensione di .loc e .iloc in questa lezione.
Riepilogo della lezione
In questa lezione ha imparato che: .loc accede agli elementi tramite l'etichetta di indice, con limiti finali degli slice inclusivi, .iloc accede agli elementi tramite la posizione intera, con limiti finali degli slice esclusivi come nelle liste Python e .at e .iat sono accessor scalari più veloci per cercare singoli elementi nei cicli. Ora esamineremo le operazioni vettorializzate sulle Series e il modo in cui Pandas gestisce automaticamente l'allineamento degli indici.
Domande Frequenti
La lezione «Accesso basato su etichette e posizioni» è gratuita?
Sì — il testo completo di «Accesso basato su etichette e posizioni» è 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 «Accesso basato su etichette e posizioni»?
Recuperi gli elementi con .loc (etichetta) e .iloc (posizione intera) e comprenda la differenza tra i due metodi. 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 2 di 4.
Quanto tempo richiede la lezione «Accesso basato su etichette e posizioni»?
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
- Creazione di una Series
- Accesso basato su etichette e posizioni
- Operazioni vettorializzate sulle Series
- Metodi utili delle Series