Sostituisci i valori delle colonne in Pandas DataFrame

Mohamed Ayman 10 ottobre 2023
  1. Usa il metodo map() per sostituire i valori delle colonne in Pandas
  2. Utilizza il metodo loc per sostituire il valore della colonna in Pandas
  3. Sostituisci i valori delle colonne con le condizioni in Pandas DataFrame
  4. Usa il metodo replace() per modificare i valori
Sostituisci i valori delle colonne in Pandas DataFrame

In questo tutorial, introdurremo come sostituire i valori delle colonne in Pandas DataFrame. Tratteremo tre diverse funzioni per sostituire facilmente i valori delle colonne.

Usa il metodo map() per sostituire i valori delle colonne in Pandas

Le colonne di DataFrame sono le Series di Pandas. Possiamo usare il metodo map per sostituire ogni valore in una colonna con un altro valore.

Series.map() Sintassi

Series.map(arg, na_action=None)
  • Parametri:
  1. arg: questo parametro è utilizzato per mappare una Series. Potrebbe essere una collezione o una funzione.
  2. na_action: è usato per trattare i valori NaN (Not a Number). Potrebbero essere necessari due valori: None o ignore. None è l’impostazione predefinita e map() applicherà la mappatura a tutti i valori, inclusi i valori Nan; ignore lascia i valori NaN così come sono nella colonna senza passarli al metodo di mappatura.

Restituisce una Series con lo stesso indice.

Facciamo ora un esempio per implementare il metodo map. Useremo lo stesso DataFrame negli esempi seguenti.

import pandas as pd
import numpy as np

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "city": ["berlin", "paris", "roma", np.nan],
}
df = pd.DataFrame(data, columns=["name", "city"])

print(df)

Produzione:

      name    city
0  michael  berlin
1    louis   paris
2     jack    roma
3  jasmine     NaN

Sostituisci i valori delle colonne con la raccolta in Pandas DataFrame

import pandas as pd
import numpy as np

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "city": ["berlin", "paris", "roma", np.nan],
}
df = pd.DataFrame(data, columns=["name", "city"])

# replace column values with collection

df["city"] = df["city"].map(
    {"berlin": "dubai", "paris": "moscow", "roma": "milan", np.nan: "NY"},
    na_action=None,
)

print(df)

Produzione:

      name    city
0  michael   dubai
1    louis  moscow
2     jack   milan
3  jasmine      NY

I valori originali della colonna DataFrame city sono sostituiti con i nuovi valori del dizionario come primo parametro nel metodo map().

Sostituisci i valori delle colonne con la funzione in Pandas DataFrame

import pandas as pd
import numpy as np

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "city": ["berlin", "paris", "roma", np.nan],
}
df = pd.DataFrame(data, columns=["name", "city"])

# replace column values with function

df["city"] = df["city"].map("I am from {}".format)

print(df)

Produzione:

      name              city
0  michael  I am from berlin
1    louis   I am from paris
2     jack    I am from roma
3  jasmine     I am from nan

na_action è None per impostazione predefinita, quindi è per questo che il NaN nella colonna originale è anche sostituito con la nuova stringa I am from nan.

Se preferisci mantenere NaN ma non sostituito, puoi impostare na_action su ignore.

import pandas as pd
import numpy as np

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "city": ["berlin", "paris", "roma", np.nan],
}
df = pd.DataFrame(data, columns=["name", "city"])

# replace column values excluding NaN

df["city"] = df["city"].map("I am from {}".format, na_action="ignore")

print(df)

Produzione:

      name              city
0  michael  I am from berlin
1    louis   I am from paris
2     jack    I am from roma
3  jasmine               NaN

Utilizza il metodo loc per sostituire il valore della colonna in Pandas

Un altro modo per sostituire il valore della colonna DataFrame di Pandas è il metodo loc() del DataFrame. Il metodo loc() accede ai valori tramite le loro etichette.

DataFrame.loc[] Sintassi

pandas.DataFrame.loc[condition, column_label] = new_value
  • Parametri:
  1. condition: questo parametro restituisce i valori che rendono vera la condizione
  2. column_label: questo parametro viene utilizzato per specificare la colonna target da aggiornare

Dopo aver determinato il valore tramite i parametri, lo aggiorniamo a new_value.

Facciamo ora un esempio per implementare il metodo loc. Useremo il seguente DataFrame come esempio.

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "grades": [30, 70, 40, 80],
    "result": ["N/A", "N/A", "N/A", "N/A"],
}

df = pd.DataFrame(data, columns=["name", "grades", "result"])

print(df)

Produzione:

      name  grades result
0  michael      30    N/A
1    louis      70    N/A
2     jack      40    N/A
3  jasmine      80    N/A

Sostituisci i valori delle colonne con le condizioni in Pandas DataFrame

Possiamo utilizzare condizioni booleane per specificare gli elementi mirati.

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "grades": [30, 70, 40, 80],
    "result": ["N/A", "N/A", "N/A", "N/A"],
}

df = pd.DataFrame(data, columns=["name", "grades", "result"])

df.loc[df.grades > 50, "result"] = "success"

df.loc[df.grades < 50, "result"] = "fail"

print(df)

Produzione:

      name  grades   result
0  michael      30     fail
1    louis      70  success
2     jack      40     fail
3  jasmine      80  success

df.loc[df.grades>50, 'result']='success' sostituisce i valori nella colonna grades con sucess se i valori sono maggiori di 50.

df.loc[df.grades<50,'result']='fail' sostituisce i valori nella colonna grades con fail se i valori sono inferiori a 50.

Usa il metodo replace() per modificare i valori

Un altro modo per sostituire i valori delle colonne in Pandas DataFrame è il metodo Series.replace().

Series.replace() Sintassi

  • Sostituisci un singolo valore
df[column_name].replace([old_value], new_value)
  • Sostituisci più valori con lo stesso valore
df[column_name].replace([old_value1, old_value2, old_value3], new_value)
  • Sostituisci più valori con più valori
df[column_name].replace(
    [old_value1, old_value2, old_value3], [new_value1, new_value2, new_value3]
)
  • Sostituisci un valore con un nuovo valore per l’intero DataFrame
df.replace([old_value], new_value)

Useremo il seguente DataFrame per il resto degli esempi.

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "salary": [700, 800, 1000, 1200],
}

df = pd.DataFrame(data, columns=["name", "salary"])

print(df)

Produzione:

      name  salary
0  michael     700
1    louis     800
2     jack    1000
3  jasmine    1200

Sostituisci i valori delle colonne con più valori in Pandas DataFrame

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "salary": [700, 800, 1000, 1200],
}

df = pd.DataFrame(data, columns=["name", "salary"])

df["name"] = df["name"].replace(["michael", "louis"], ["karl", "lionel"])

print(df)

Produzione:

      name  salary
0     karl     700
1   lionel     800
2     jack    1000
3  jasmine    1200

Sostituisci i valori delle colonne solo con lo stesso valore in Pandas DataFrame

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "salary": [700, 800, 1000, 1200],
}

df = pd.DataFrame(data, columns=["name", "salary"])

df["salary"] = df["salary"].replace([1000, 1200], 1500)

print(df)

Produzione:

      name  salary
0     karl     700
1   lionel     800
2     jack    1500
3  jasmine    1500

Sostituisci il valore della colonna con un valore in Pandas DataFrame

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "salary": [700, 800, 1000, 1200],
}

df = pd.DataFrame(data, columns=["name", "salary"])

df["salary"] = df["salary"].replace([700], 750)

print(df)

Produzione:

      name  salary
0     karl     750
1   lionel     800
2     jack    1000
3  jasmine    1200

Sostituisci i valori nell’intero DataFrame Pandas

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "salary": [700, 800, 1000, 1000],
}

df = pd.DataFrame(data, columns=["name", "salary"])


df = df.replace([1000], 1400)

print(df)

Produzione:

      name  salary
0     karl     750
1   lionel     800
2     jack    1400
3  jasmine    1400

Articolo correlato - Pandas DataFrame