Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Substituir parte de uma string

Olá,

Estou aplicando os conceitos ensinados no curso em outros datasets, porém, dei uma travada ao substituir parte de uma string.

Tenho um DataFrame :

Name / Position Title / Employee Annual Salary

AARON, ELVIA J / WATER MGMNT / $88967.00

Estou tentando calcular a media dos salario, mas como tem um '$', nao consigo tranforma-lo em um numero. Tentei varias formas para substituir ou separar o '$', mas não deu certo.

Alguma sugestão?

Obrigada

7 respostas

Oi Daiane, como você está? Espero que esteja bem =)

Você pode utilizar o método replace que é inerente ao tipo str(strings). Ele possui a seguinte sintaxe:

string.replace(palavra_que_você_quer_substituir_na_string, texto_para_substituição)

Nesse caso, podemos substituir o cifrão por uma string vazia:

valor = '$88967.00'
valor = valor.replace('$', '')
print(valor)

Com isso, teremos de resultado: 88967.00. Mas, esse número ainda é do tipo str e como precisamos fazer operações com ele, precisamos convertê-lo para float, já que o mesmo possui casas decimais:

valor = float(valor)

Agora podemos facilmente realizar operações, veja:

valor = valor + 500
print(valor)

Resultado: 89467.0

Qualquer coisa estou por aqui.

Abraços e bons estudos!

Oi Nádia,

Obrigada pela resposta. O código roda (não dá erro), mas quando chamo novamente a variável, ele apresenta o resultado exatamente igual, como se eu não tivesse feito nenhuma alteração.

Como teste, coloquei a string inteira e o código rodou, o valor foi substituído por 'D':

dados.replace('$88967.00', 'D')

Mas quando coloco o código abaixo, não tem nenhuma alteração:

dados.replace('$', '')

Parece que ele só entende a 'string completa'...

Esqueci de mencionar também...

Tentei o método abaixo, sem sucesso :(

dados = dados.replace ('$' , '  ')

Daiane, fiz abaixo um dataframe de exemplo onde possuo uma coluna similar a Annual Salary:

    Name Annual Salary
0    Tom     $88967.00
1   nick     $38967.00
2  krish     $48957.00
3   jack     $28963.00

Para calcular a média fiz um laço de repetição para percorrer todos os valores da coluna Annual Salary(um a um), dentro do laço efetuei o procedimento para substituir o caracter cifrão por uma string vazia e posteriormente a conversão para float:

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'krish', 'jack'],
        'Annual Salary': ['$88967.00', '$38967.00', '$48957.00', '$28963.00']
}

df = pd.DataFrame(data)
sum_salary = 0

for value in df['Annual Salary']:
    value = value.replace('$', '')
    value = float(value)
    sum_salary  += value

mean_salary = sum_salary/len(df['Annual Salary'])

print("A média dos salários é:", mean_salary)

Esse procedimento de tratamento dos dados não alterou a coluna original, ela permanece com o cifrão. O que fizemos foi tratar os dados em tempo de execução para que pudéssemos calcular a média.

Caso não obtenha êxito, compartilhe o link do seu código para que eu possa te dizer com mais assertiva o que fazer.

Estou por aqui, a gente vai conversando.

solução!

Daiane,

Realmente o replace dentro do pandas tem um funcionamento um pouco diferente do Python. Quando informado uma string é preciso ser exatamente igual,caso deseje alterar um caractere ou um conjunto é necessario utilizar expressão regular, o comando abaixo resolve seu problema.

`

dados.replace(regex=r'^\$', value='')

`

Fonte: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.replace.html

@Nadia,

Quando apliquei o comando, ele apresentava o erro: AttributeError: 'float' object has no attribute 'replace'

Estava tentando corrigir, tentei mudar para 'str' e então dava outro erro rs 'str' object has no attribute 'str'

Cleiton,

Ainda estou "aprendendo a aprender" com a documetação. Cheguei a ler essa página, mas não tinha encontrado a solução.

Muito obrigada! Deu certo