Tutorial: Strings em Python

Trabalhar com variáveis texto não é a coisa mais difícil do mundo, mas nem sempre é trivial. Como contar a quantidade de caracteres (i.e. o comprimento) de uma variável? Como converter uma variável minúscula para maiúscula? Como pegar um trecho (~substring) de uma variável texto? Como concatenar dois campos e criar uma nova coluna com base neles? Tudo isso é essencial para a sobrevivência de um cientista de dados. Neste post, vamos conhecer alguns comandos essenciais para quando se trabalha com variáveis strings no Python.

Quando importamos um arquivo, variáveis podem ser inseridas como texto erroneamente. Além disso, sabemos que para criar campos de identificação únicos, combinar diversos campos para formar este campo chave é uma solução boa. Para todas estas tarefas, você precisará saber comandos essenciais na linguagem sendo utilizada. Vou tentar exemplificar alguns dos usos dos comandos abaixo sempre que possível, mas cabe ao leitor lidar com as mil utilidades que cada função pode ter a depender do problema.

O BÁSICO DE STRINGS NO PYTHON

Como muitos sites apresentam exemplos assim, primeiro vou deixar alguns comandos simples para serem feitos com uma string qualquer:

# Exemplos com string qualquer

string = 'carro'

# verifica se está em letra maiúscula

string.isupper()

# verifica se está em letra minúscula

string.islower()

# converte para letra maiúscula

string.upper()

Isso apenas para você relembrar como funcionam as coisas no Python. Você criou uma variável que se chama ‘string’ e recebeu o valor ‘carro’. Claramente no formato texto, você consegue usar algumas funções próprias para este tipo de variável. No Python, você sempre escreve o objeto seguido de um ponto e a função que você vai aplicar nele.

Para acessar as informações de uma variável texto, como por exemplo a primeira ou a segunda letra, você só precisa utilizar os colchetes com a posição da letra que você busca:

# traz a primeira letra
string[0]

# traz da segunda ate a quarta letra
string[1:4]

# traz a ultima letra
string[-1]

Note que quando trazemos um intervalo (ex.: da segunda até a quarta letra), utilizamos um intervalo aberto, ou seja, ali estamos chamando um elemento da posição 1 até a posição 3. Se quiséssemos o primeiro, o segundo e o terceiro caractere, utilizaríamos [0:3].

Outro ponto de atenção: se você está utilizando o Jupyter Notebook também, lembre-se de que você só vai observar a resposta do último comando ao rodar o trecho todo dentro de uma célula. Você pode colocar um comando por vez só para observar como funciona ou pode pedir que o resultado de todos apareçam:

# traz a primeira letra
print(string[0])

# traz a terceira letra
print(string[2])

# traz a ultima letra
print(string[-1])

Se você quiser combinar variáveis, então fica mais fácil ainda. Para concatenar no Python, basta somar as variáveis que você quer unir:

# cria uma variavel
var1 = "AABB"

# cria outra variavel
var2 = "CCDD"

# une as duas
var1+var2

Enquanto o sinal de soma serve para concatenar, o sinal de multiplicação serve para duplicar o texto:

# cria variavel exemplo
exemplo = "Hello World"

# duplica o texto
print(exemplo*2)

Se você quiser saber se um trecho (uma substring) está na variável, mais intuitivo é impossível, use o in e você receberá o retorno True ou False:

# verifica se o texto contem alguma palavra especifica
'World' in exemplo

De forma análoga, você pode utilizar o not in:

# verifica se o texto NAO contem alguma palavra especifica
'World' not in exemplo

Como o Python é case sensitive, você pode querer utilizar algo diferente, como:

# verifica se o texto contem alguma palavra especifica
'WORLD' in exemplo.upper()

No caso, o retorno será True mesmo se exemplo for igual a World, WORLD, WorLD, etc.

Agora, alguns outros comandos – este trecho é bem mais autoexplicativo – que podem ser úteis. Notem que aqui estou utilizando o print() somente para que você possa colar o exemplo e rodá-lo do jeito que está, mas você não precisa do print() para utilizá-los:

# cria variavel exemplo
exemplo = " hello world "

# deixa a letra inicial maiuscula
print(exemplo.capitalize())

# conta numero de vezes que a letra 'o' aparece
print(exemplo.count('o'))

# comprimento da string, incluindo espacos em branco
print(len(exemplo))

# remove espaços em branco no inicio e fim
print(exemplo.strip())
# remove espaços em branco do fim
print(exemplo.rstrip())
# remove os espacos em branco do inicio
print(exemplo.lstrip())

# remove espacos em branco do meio (faz uma substituicao desses espacos)
print(exemplo.replace(' ',''))

# Verifica se a variavel termina com um caractere especifico
print(exemplo.endswith('.'))

TRABALHANDO VARIÁVEIS TEXTO NO DATAFRAME

Embora seja interessante conhecer estes comandos, a maioria das pessoas não trabalha com uma variável sozinha, do jeito apresentado acima. Normalmente, trabalhamos com um conjunto de dados. Por isso, vamos seguir com exemplos de quando recebemos uma base qualquer e precisamos trabalhá-la dentro do Python. Como de costume, vamos primeiro criar um pequeno conjunto de dados para utilizar de exemplo. No caso, uma base com o registro dos clientes que compraram algo em sua loja:

import pandas as pd

df_exemplo = pd.DataFrame([('C115235', 100, 25, 'paulo@gmail.com'),
('B215235', 200, 34, 'maria@gmail.com'),
('a215235', 380, 40, 'fatima@gmail.com'),
('B825235', 150, 25, 'pedro@hotmail.com'),
('a825235', 250, 30, 'joao@yahoo.com'),
('A8252355', 400, 45, 'carolina@yahoo.com')],
columns=('Id', 'Vlr_Gasto', 'Idade', 'Email'))
df_exemplo

No exemplo, temos as informações da chave de identificação de um cliente, valor gasto na loja, idade e o e-mail. Você sabe que a chave de identificação deve ter 7 caracteres, então vamos validar essa informação contando a quantidade de caracteres (o comprimento) na variável:

# Contagem de caracteres
df_exemplo['Id'].str.len()

df_exemplo

Claro, a nossa tabela é pequena. Se fosse uma grande, seria mais complicado. Uma maneira de fazer essa verificação, é criando uma coluna com a contagem de caracteres:

df_exemplo['Qtd_Caracteres_Id'] = df_exemplo['Id'].str.len()

df_exemplo

Pronto, sabemos que a última linha contém algum erro. Por enquanto, não faremos nada, mais para frente voltamos a isso. Note que para dataframes temos um padrão semelhante ao chamar uma função, damos o nome do dataframe e seguimos com um ponto e o nome da função utilizada. Porém, ao invés de utilizar len() sozinho, as funções estão desenhadas com um str na frente.

Outra coisa que podemos fazer, é deixar a chave de identificação totalmente maiúscula. Isto é, fazer com que o texto fique todo em caixa alta:

df_exemplo['Id'] = df_exemplo['Id'].str.upper()

df_exemplo

Agora, vamos imaginar que você saiba que a construção do campo Id seja dada da seguinte forma: a primeira letra representa o risco do consumidor (e.g.: consumidor A tem menor risco) e o segundo e terceiro dígito sejam o DDD da residência deste consumidor. Você pode criar os campos ‘Risco’ e ‘DDD’ com base no campo Id:

for n in range(0,len(df_exemplo)):
df_exemplo.loc[n,'DDD'] = df_exemplo.loc[n,'Id'][1:3]

for n in range(0,len(df_exemplo)):
df_exemplo.loc[n,'Risco'] = df_exemplo.loc[n,'Id'][0]

# valida output
df_exemplo

Atenção para dois pontos: (1) cuidado com o espaçamento após o ‘for …’, recomendo dar enter depois do ‘:’ e ver onde ficará a barra de digitação, aí você insere o trecho ‘df_exemplo.loc[n,’DDD’]…’; (2) note que precisamos usar o loc após o nome do dataframe. Isto faz parte do esquema de indexação do Pandas, que é nome_do_dataframe.loc[linha,coluna]. O comando [1:3] indica quais letras queremos trazer, no caso, da 1 à 2 para o DDD e a 0 para o Risco. Leia mais sobre indexação no Pandas aqui.

E se você precisasse trazer o provedor de e-mail da pessoa? Você poderia ter, ao invés do arroba, um hífen ou qualquer símbolo separando partes que você quer extrair da variável. Bom, para isso, você pode contar com o str.split:

# para pegar provedor
df_exemplo['Email'].str.split('@').str[0]

# valida output
df_exemplo

Para melhor entendimento, recomendo que você faça um teste e crie uma coluna somente com o resultado da função split (tente df_exemplo[‘Email’].str.split(‘@’)).

E se você quisesse ‘arrumar’ o Id da última linha, retirando o último elemento? Ou então você quisesse criar um Id, mas sem o Risco, ou seja, retirando o primeiro elemento? Para isso, use o comando slice:

# Retira o primeiro caractere de id
df_exemplo['Id_Ajuste'] = df_exemplo['Id'].str.slice(1)

# Retira o último caractere de Id
df_exemplo['Id_Novo'] = df_exemplo['Id'].str.slice(start=0, stop=7)

df_exemplo

E se você descobrisse que o campo Id é uma combinação que não faz dele único? Talvez você queira concatenar o campo Id com o e-mail para torná-lo único (ainda que na prática seja uma péssima ideia). Nesse caso, a forma mais simples é simplesmente somando as variáveis (igual quando não estão no DataFrame).

# Cria o Id Final combinando o Id_Novo e o Email
df_exemplo['Id_Final'] = df_exemplo['Id_Novo']+df_exemplo['Email']

df_exemplo

Por fim, e se você precisar localizar um pedaço do texto, um subtexto(?), uma substring, um trecho ou uma letra qualquer, dentro da variável? Então, uma opção que eu vejo é de utilizar o find que serve para identificar em que posição está o que você está procurando e, se não encontra, retorna -1:

# Encontrando quem tem 21 no Id
df_exemplo["FL_RJ"]= df_exemplo["Id"].str.find('21')

# Encontrando quem tem a no campo de Email
df_exemplo["Posicao_Letra_a"]= df_exemplo["Email"].str.find('a')

df_exemplo

E se você gostou do post, não vá embora sem deixar uma curtida ou um comentário. Dá bastante trabalho fazer o conteúdo do blog e o feedback de quem lê é muito motivador. Se encontrou algum erro ou tem alguma sugestão, dúvida, elogio ou crítica, pode escrever nos comentários ou me enviar uma mensagem diretamente em Sobre o Estatsite. E visite também a conta do Twitter @EstatSite.

Forte abraço e bons estudos!

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *