Substituir Valores de Coluna em Pandas DataFrame

Mohamed Ayman 10 outubro 2023
  1. Utilize o map() Método para Substituir Valores de Colunas em Pandas
  2. Utilize o método loc para substituir o valor da coluna em Pandas
  3. Substituir valores da coluna por condições em Pandas DataFrame
  4. Utilize o replace() Método para Modificar Valores
Substituir Valores de Coluna em Pandas DataFrame

Neste tutorial, iremos introduzir como substituir os valores das colunas em Pandas DataFrame. Cobriremos três funções diferentes para substituir facilmente os valores das colunas.

Utilize o map() Método para Substituir Valores de Colunas em Pandas

As colunas DataFrame são Pandas Series. Podemos utilizar o método map() para substituir cada valor de uma coluna por outro valor.

Series.map() Sintaxe

Series.map(arg, na_action=None)
  • Parâmetros:
  1. arg: este parâmetro é utilizado para mapear uma Series. Pode ser uma colecção ou uma função.
  2. na_action: É utilizado para lidar com valores NaN (Not a Number). Poderia ter dois valores - None ou ignore. O None é o padrão, e o map() aplicará o mapeamento a todos os valores, incluindo os valores Nan; o ignore deixa os valores NaN como estão na coluna sem os passar para o método de mapeamento.

Retorna uma Series com o mesmo índice.

Agora vamos tomar um exemplo para implementar o método map. Vamos utilizar o mesmo DataFrame nos exemplos abaixo.

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)

Resultado:

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

Substituir valores de coluna por recolha na DataFrame de Pandas

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)

Resultado:

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

Os valores originais da coluna DataFrame city são substituídos pelos novos valores do dicionário como o primeiro parâmetro no método map().

Substituir valores da coluna por função na DataFrame Pandas

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)

Resultado:

      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

A na_action é None por defeito, por isso a NaN na coluna original é também substituída pela nova string I am from nan.

Se preferir manter NaN mas não substituir, pode definir a na_action para ser 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)

Resultado:

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

Utilize o método loc para substituir o valor da coluna em Pandas

Outra forma de substituir o valor da coluna Pandas DataFrame é o método loc() do DataFrame. O loc() método de acesso aos valores através das suas etiquetas.

DataFrame.loc[] Sintaxe

pandas.DataFrame.loc[condition, column_label] = new_value
  • Parâmetros:
  1. condition: este parâmetro devolve os valores que tornam a condição verdadeira
  2. column_label: este parâmetro utilizado para especificar a coluna visada a actualizar

Depois de determinar o valor através dos parâmetros, actualizamo-lo para new_value.

Agora vamos tomar um exemplo para implementar o método loc. Utilizaremos o DataFrame abaixo como exemplo.

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)

Resultado:

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

Substituir valores da coluna por condições em Pandas DataFrame

Podemos utilizar condições booleanas para especificar os elementos visados.

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)

Resultado:

      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' substitui os valores na coluna grades por success se os valores forem superiores a 50.

df.loc[df.grades<50,'result']='fail' substitui os valores na coluna grades por fail se os valores forem inferiores a 50.

Utilize o replace() Método para Modificar Valores

Outra forma de substituir os valores das colunas em Pandas DataFrame é o método Series.replace().

Series.replace() Sintaxe

  • Substituir um único valor
df[column_name].replace([old_value], new_value)
  • Substituir vários valores com o mesmo valor
df[column_name].replace([old_value1, old_value2, old_value3], new_value)
  • Substituir múltiplos valores por múltiplos valores
df[column_name].replace(
    [old_value1, old_value2, old_value3], [new_value1, new_value2, new_value3]
)
  • Substituir um valor por um novo valor para todo o DataFrame
df.replace([old_value], new_value)

Utilizaremos o DataFrame abaixo para o resto dos exemplos.

import pandas as pd

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

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

print(df)

Resultado:

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

Substituir valores de coluna por valores múltiplos em DataFrame Pandas

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)

Resultado:

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

Substituir valores da coluna apenas pelo mesmo valor em 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)

Resultado:

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

Substituir o valor da coluna por um valor em 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)

Resultado:

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

Substituir valores em todo o Quadro de Dados 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)

Resultado:

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

Artigo relacionado - Pandas DataFrame