5
respostas

PANDAS: DataFrame | Como dar replace em '\'

Validando os dados

####descricao = /*-+.,<>;:'@#$%¨&"=()+ and strip á é í ó ú <---- Preciso que isso tudo seja alterado

#ids = {'B': 'b', 'R': 'r'} ids = {'b': 'B', 'r': 'R','-': ' ','':''} for old, new in ids.items(): df['modelo'] = df['modelo'].replace(old, new, regex=False) df['referencia'] = df['referencia'].replace(old, new, regex=False) df['descricao'] = df['descricao'].replace(old, new, regex=False)

df['modelo'] = df['modelo'].replace(ids) df

File "C:\Users\BRUNON~1\AppData\Local\Temp/ipykernel_12440/3028700897.py", line 6 ids = {'b': 'B', 'r': 'R','-': ' ','':''} ^ SyntaxError: EOL while scanning string literal

Eu estou tentando dar replace na contra barra '' porém não consegui achar uma maneira para faze-la. Há algum detalhe que eu não estou sabendo, já tentei ''\'', '"\"',"'\'" diversas variáveis mas sem sucesso.

5 respostas

Oi Maigui! Tudo bem com você?

Para utilizar a contra barra \ em Python você precisa colocar duas contra barra da seguinte forma: \\. É importante destacar também que não é possível utilizar regex=True nesse caso. Então é só você incluir a string '\\' que ela será considerada como '\'.

Isso é feito dessa forma pois a contra barra em uma string espera um caractere de comando, um exemplo é o \n que vai saltar a linha naquele ponto, ou o \t que adicionará uma tabulação onde ele estiver na string, com a segunda contra barra, esse efeito é cancelado.

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

Bons estudos!

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

@Mirla Borges Tudo ótimo,

Muito obrigado consegui fazer o replace, porém ao salvar no excel a coluna cnpjfornecedor está ficando errada. Ela está salvando dessa forma Insira aqui a descrição dessa imagem para ajudar na acessibilidadeO Valor original é 08.482.581/0001-57.

O datatype no pandas dessa coluna está como object, seria o correto, Se não qual seria o melhor datatype para utilizar?

Oi Maigui!

Nesse caso, acredito que seria interessante você salvar essa coluna como do tipo string antes de transformar o DataFrame em excel pois imagino que os valores da coluna cnpjfornecedor estão sendo considerados numéricos e seus dados estejam sendo transformados. Você pode fazer os seguintes comandos para definir a coluna como elementos string:

df['cnpjfornecedor'] = df['cnpjfornecedor'].astype('str')

Com o meu teste deu certo, mas verifique se funciona com o seu banco de dados também.

E caso tenha alguma outra dúvida fora desse contexto sugiro também abrir outro tópico no fórum para que assim outros alunos e alunas possam tirar dúvidas semelhantes a sua mais facilmente ^^ Mesmo assim, se o problema persistir pode comunicar que estarei à disposição! Bons estudos.

Oi Mirla!

Eu tentei transformar a coluna porém o erro persiste, no jupyter eu vejo o resultado que eu quero mas quando vou abrir o csv aparece do mesmo jeito que te mostrei na imagem.

https://drive.google.com/drive/folders/1QaIWaSKQHgYaIHTLgLrErFmgp9z9UAq5?usp=sharing

Deixei o link do csv teste que estou utilizando e meu código até o momento. Acho que assim fica mais fácil de visualizar.

Oi Maigui!

Desculpa a demora em trazer um retorno.

Nesse caso, eu observei que em seu código você tirou os pontos, traços e barras do valor do cnpj, p que fez o valor original, 08.482.581/0001-57, se tornar 08482581000157 e quando o Excel recebe números desse modo, mesmo que eles estejam como strings no DataFrame, ele converte o visual do número para a forma que o programa estiver configurado. Mesmo assim esse valor não é perdido, se você abrir o arquivo gerado a partir do bloco de notas, você vai notar que o número se mantem correto no arquivo:

Alt text: Print do bloco de notas das colunas do DataFrame disponibilizado pelo aluno. A coluna cnpjfornecedor está destacada com um retangulo em vermelho sem preenchimento

Infelizmente, no Excel o 0 a esquerda do cnpj do fornecedor é ignorado, o que pode prejudicar bastante o trabalho com esse dado. Então, a melhor opção para você conseguir ter um bom armazenamento e disposição dos dados de cnpj é não remover os pontos, traços e barras presentes nessa coluna. Normalmente, valores de cpf e cnpj não são editados nesse sentido para que não se tornem valores numéricos e seus dados sejam perdidos ou mal formatados para visualização, já que precisamos deles inteiros.

Ainda assim, se a aplicação requere que os dados sejam sem nenhum destes caracteres, os dados reais não são perdidos na conversão para csv e é possível configurar a formatação de visualização do Excel, o tutorial para essa configuração você pode encontrar no artigo Manter os zeros à esquerda e números grandes disponibilizado pela Microsoft.

Veja se seguindo algumas dessas sugestões a visualização fica melhor distribuída. Se o problema persistir pode informar aqui que estarei à disposição ;-)