Olá Marcelo tudo bem com você??
Com o Pandas podemos tratar o DF a fim de minimizar essas diferenças, mas não existe algo muito direto como solução. Sugiro seguir esses passos:
Primeiramente vamos deixar seu DF todo em minúsculas
In [16]: s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'],
....: dtype="string")
....:
In [17]: s.str.lower()
Out[17]:
0 a
1 b
2 c
3 aaba
4 baca
5 <NA>
6 caba
7 dog
8 cat
dtype: string
Depois poderemos montar uma sequência com as exceções que você deseja, referente as acentuações ou caracteres especiais:
spec_chars = ["!",'"',"#","%","&","'","(",")",
"*","+",",","-",".","/",":",";","<",
"=",">","?","@","[","\\","]","^","_",
"`","{","|","}","~","–"]
for char in spec_chars:
df['title'] = df['title'].str.replace(char, ' ')
No exemplo que dei, basta substituir por "á", "à","ã"
é assim por diante e colocar a referência str.replace(char, 'a')
. Trabalhoso, mas funciona. As informações foram retiradas da documentação oficial do Pandas, segue o LINK para futuras consultas! =)
Deixo também a sugestão do nosso artigo sobre o assunto!
Manipulação de Dados com Pandas
Espero ter te ajudado e qualquer coisa é só retornar aqui!