HOWTO · Pandas

Pandas map Python

Questo tutorial spiega come possiamo sostituire i valori di una serie Pandas con un altro valore utilizzando il metodo Series.map().

In questa pagina

Series.map() trasforma ogni valore di una Series pandas e restituisce una nuova Series. L’oggetto restituito mantiene l’indice di input, quindi la mappatura modifica i valori, non le etichette dell’indice. Puoi usarlo con una funzione, una ricerca simile a un dizionario o un’altra Series; consulta il riferimento a Series.map() per i dettagli completi dell’API.

Come Series.map() trasforma i valori

L’argomento determina come viene trasformato ciascun valore di input. Una funzione richiamabile riceve ogni valore; un dizionario usa i valori di input come chiavi; una Series usata come mappatura usa il proprio indice come chiavi di ricerca e i propri valori come sostituzioni. Il risultato mantiene l’indice della Series mappata, anche quando una ricerca restituisce un valore mancante. In questo modo i valori mappati restano allineati alle righe originali. La chiamata non modifica la Series di input: salva il valore restituito oppure assegnalo dove ti serve il dato trasformato. Il tipo di dato del risultato dipende dai valori mappati; una ricerca che introduce valori mancanti o restituisce stringhe può produrre un tipo diverso da quello di input.

Scegliere una funzione di mappatura, un dizionario o una Series

Usa una funzione richiamabile per applicare una regola, un dizionario per una tabella di ricerca fissa oppure una Series quando la tabella di mappatura è già memorizzata come dati etichettati. Le chiavi del dizionario senza una voce corrispondente producono un valore mancante. Se usi una Series come mappatura, la ricerca avviene nel suo indice, non nei suoi valori.

Gestire i valori mancanti con na_action

Per impostazione predefinita, una funzione richiamabile viene applicata anche ai valori mancanti; questo può essere inadatto per operazioni come chiamare .upper(). Imposta na_action="ignore" per lasciare invariato un valore di input mancante e mappare gli altri valori. Questa opzione non elimina le righe mancanti. Anche un valore senza una mappatura nel dizionario o nella Series diventa mancante, anche se il valore di input era presente.

Mappare una colonna di DataFrame

Selezionando una colonna da un DataFrame si ottiene una Series: puoi quindi chiamare map() su quella colonna e assegnare nuovamente la Series restituita. Le altre colonne restano invariate. Poiché l’assegnazione allinea i dati in base all’indice, la Series restituita mantiene le etichette di riga della colonna selezionata.

Eseguire e verificare gli esempi

Prima di eseguire questo esempio autonomo, installa pandas nel tuo ambiente Python. Il codice stampa ogni risultato della mappatura, così puoi controllare localmente valori e indici. L’output riportato sotto è il risultato acquisito per questo codice; le etichette visibili nei blocchi di codice e nell’output restano in inglese.

Esegui questo esempio:

import pandas as pd

scores = pd.Series([85, 87, 90], index=["a", "b", "c"])
print("Callable:")
print(scores.map(lambda value: value + 5))

labels = {85: "pass", 90: "excellent"}
print("Dictionary:")
print(scores.map(labels))

label_table = pd.Series({85: "pass", 87: "review", 90: "excellent"})
print("Series lookup:")
print(scores.map(label_table))

names = pd.Series(["ada", pd.NA, "lin"])
print("Ignore missing values:")
print(names.map(lambda value: value.upper(), na_action="ignore"))

table = pd.DataFrame({"score": [85, 90], "student": ["Ada", "Lin"]}, index=["a", "b"])
table["grade"] = table["score"].map({85: "pass", 90: "excellent"})
print("Mapped DataFrame column:")
print(table)
Callable:
a    90
b    92
c    95
dtype: int64
Dictionary:
a         pass
b          NaN
c    excellent
dtype: str
Series lookup:
a         pass
b       review
c    excellent
dtype: str
Ignore missing values:
0    ADA
1    NaN
2    LIN
dtype: str
Mapped DataFrame column:
   score student      grade
a     85     Ada       pass
b     90     Lin  excellent