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

[Sugestão] Aviso de SyntaxWarning: invalid escape sequence '\(' ao usar str.contains

Oi pessoal,

Ao tentar filtrar valores em uma coluna que possuem parênteses, usei o código oferecido em aula:

populacao_estados[populacao_estados['POPULAÇÃO'].str.contains('\(', na=False)]

O problema é que recebi o seguinte aviso:

<>:6: SyntaxWarning: invalid escape sequence '\('
<>:6: SyntaxWarning: invalid escape sequence '\('
/tmp/ipython-input-2998396884.py:6: SyntaxWarning: invalid escape sequence '\('
  populacao_estados[populacao_estados['POPULAÇÃO'].str.contains('\(', na = False)]

Esse aviso acontece porque a barra invertida (\) dentro de uma string normal é interpretada como início de uma sequência de escape (como \n para quebra de linha).

Segundo a documentação, para resolver basta usar uma raw string (r'...'), que trata a barra invertida como literal. Assim:

populacao_estados[populacao_estados['POPULAÇÃO'].str.contains(r'\(', na=False)]

Dessa forma o aviso desaparece e a expressão regular funciona como esperado.

Obs.: O método str.contains usa expressões regulares por padrão, por isso precisamos escapar o parêntese.

2 respostas
solução!

Oi Yuri, tudo bem?

Isso! Você está certo sobre o aviso de SyntaxWarning: invalid escape sequence '\('. Isso acontece porque, em strings normais, a barra invertida (\) é usada para iniciar sequências de escape, como \n para uma nova linha. Quando você quer que a barra invertida seja tratada como um caractere literal, é uma boa prática usar uma raw string, prefixando a string com r, como você fez na sua solução.

Agradeço pela dica compartilhada com a comunidade!

Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Oi Monalisa, tudo bem!

Valeu pela confirmação!
Só acrescentando: seguindo as aulas, percebi que em praticamente todos os regex é recomendado usar r'' por causa dos metacaracteres (\d, \s, \w, ( etc.). Assim o Python interpreta a barra invertida literalmente e evita aqueles SyntaxWarning.

Abraços