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

Substituir varios characteres de um strings dentro de um dataframe

Existe uma forma mais elegante de substituir varios caracteres de strings em um dataframe. Estou comparando uma tabela de excel com um banco de dados, após extrair ambos os dados em um dataframe, tenho que substituir alguns caracteres para comparar os dados, existe alguma forma mais elegante do que fazer uma linha para cada substituição.

    compare['description_polarion'] = compare[ 'description_polarion'].str.replace('&lt;', '<')
    compare['description_polarion'] = compare[ 'description_polarion'].str.replace('&gt;', '>')
    compare['description_polarion'] = compare[ 'description_polarion'].str.replace('_x000D_', '')
    compare['description_polarion'] = compare[ 'description_polarion'].str.replace('* ', '', regex=False)
    compare['description_polarion'] = compare[ 'description_polarion'].str.replace('&#39;', "'")
    compare['description_polarion'] = compare[ 'description_polarion'].str.replace('. ', '.', regex=False)

Onde compare é um dataframe pandas. Já tentei

    compare['description_polarion'] = compare[ 'description_polarion'].str.replace('&lt;', '<').replace('&gt;', '>')

Mas não funciona. Neste caso, só o primeiro replace acontece.

3 respostas
solução!

Olá, Marcelo! Tudo bom contigo? Espero que sim!

A forma como você utilizou para substituir muitos caracteres (compare['description_polarion'] = compare[ 'description_polarion'].str.replace('&lt;', '<').replace('&gt;', '>')) só vai considerar o primeiro replace mesmo. Uma forma mais elegante de você fazer isso é utilizar um laço for para a substituição de múltiplos caracteres. Primeiro, você pode criar um dicionário no qual as chaves são as palavras a serem substituídas e os elementos as palavras que irão substituir, podendo ser do seguinte modo com base no seu código:

dic = {'&lt;': '<','&gt;': '>','_x000D_': '','* ': '','&#39;': "'",'. ': '.'}

Depois disso, crie um laço for que as variáveis vão ler as chaves e os elementos através do método .items() do dicionário. E dentro do for, você pode fazer a substituição com o método replace, do seguinte modo:

for i, j in dic.items():
    compare['description_polarion'] = compare['description_polarion'].str.replace(i, j)

Eu espero ter te ajudado! Se o problema persistir ou surgir outra dúvida estarei à disposição.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Obrigado, agora ficou mais elegante, e se eu identificar um novo caracter para substituir, só preciso atualizar o dicionário. Unico comentário é que para alguns caracteres preciso da opção regex=False, então só modifiquei o código para ter essa opção sempre False, já que para str.replace o default é True. Mais uma vez, obrigado.

for i, j in dic.items():
    compare['description_polarion'] = compare['description_polarion'].str.replace(i, j, regex=False)

Por nada!

Bem lembrado esse ponto, haha ^^

Parabéns pela solução e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software