Blog

Postado em em 15 de abril de 2024

Padronização de Nomes de Colunas no Pandas

Aprenda a fazer a padronização de nomes de colunas no Pandas para que você tenha o mesmo estilo sempre e não se confunda na hora de fazer suas análises.

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Padronização de Nomes de Colunas no Pandas

Na aula de hoje, vou te mostrar como fazer o processo de padronização de nomes de colunas no Pandas.

A padronização de informações é crucial, especialmente quando trabalhamos com o Pandas, pois torna a visualização das informações das colunas mais fácil e facilita nossas análises.

Padronizar a escrita dos nomes das colunas não apenas facilita a leitura dos dados, mas também o uso dos recursos do Pandas.

Então, faça o download do material disponível e vem comigo que eu vou te mostrar como fazer a padronização de nomes de colunas no Pandas.

Análise Inicial das Colunas do DataFrame

Para essa aula, gerei um DataFrame a partir de um dicionário em Python.

import pandas as pd

df = pd.DataFrame({
    "ID   Usuario": [1, 2, 3, 4, 5],
    "produto/descricao": ["Samsung Galaxy S10", "iPhone 11", "Xiaomi Redmi Note 8", "Motorola Moto G8", "Samsung Galaxy A10"],
    "CorDisponivel": ["Preto", "Branco", "Azul", "Vermelho", "Preto"],
    "preco": [4000, 5000, 1500, 1200, 800],
    "Quantidade em Estoque": [2, 1, 3, 2, 4],
    "DATA": ["2024-01-02", "2024-01-02", "2024-01-03", "2024-01-04", "2024-01-06"]
})

df

DataFrame gerado

Dentro dele temos as colunas: ID Usuario, produto/descricao, CorDisponivel, preco, Quantidade em Estoque e DATA.

df.columns

Colunas DataFrame

Perceba como não existe um padrão para essas colunas. Temos nomes com espaços extras, mistura de maiúsculas e minúsculas e assim por diante. Cada coluna está com o nome escrito de uma forma.

Isso impacta negativamente na clareza e na acessibilidade do seu código.

Acessando as Informações das Colunas – Limitação

Outro ponto que podemos levar em consideração quanto aos nomes dessas colunas é que nem todas são possíveis de serem acessadas através da notação de ponto.

Por exemplo, quando acessamos os valores presentes nas colunas através da sintaxe: nome_do_dataframe.nome_da_coluna

df.preco

Acessando dados por notação de ponto

Essa notação não pode ser utilizada com colunas que possuam espaço em seus nomes, ou caracteres especiais que representem alguma operação do Python, como a barra (/), resultando em erros.

df.ID   Usuario

Erro de sintaxe

Nesse caso, teríamos de usar obrigatoriamente a notação por colchetes, evitando erros.

df['ID   Usuario']

Notação por colchete

Notação de Colchetes – Dica de Uso

Como vimos, a notação de ponto nem sempre funcionará corretamente, dependendo do nome da coluna sendo acessada. Esse é um dos motivos pelos quais a notação de colchetes acaba se tornando uma opção mais viável por evitar esses erros.

Além disso, quando trabalhamos com equipes multidisciplinares, vamos encontrar pessoas que não necessariamente são da área de dados e não tenham familiaridade com o uso do Pandas.

A notação por ponto pode acabar se confundindo com o acesso a um atributo de um objeto, visto que essa é uma sintaxe comum na área de programação.

Dessa forma, optar pelos colchetes pode tornar o código mais claro e acessível para todas as pessoas envolvidas no trabalho.

Padrões de Texto em Programação

Dentro da programação, possuímos alguns padrões de escrita para nomes de variáveis, funções, classes e assim por diante. Esses padrões de escrita são chamados de estilos de case.

Alguns desses tipos de case são:

  • Snake Case (snake_case): Nesse estilo, todas as letras são minúsculas e as palavras são separadas por um underscore.
  • Camel Case (camelCase): Cada palavra composta no nome da variável começa com uma letra maiúscula, com exceção da primeira palavra que começa com minúscula.
  • Kebab Case (kebab-case): Nesse tipo de case, todas as letras também são minúsculas, e as palavras são separadas por hífens.
  • Pascal Case (PascalCase): Similar ao Camel Case, nesse estilo, a primeira letra de todas as palavras é maiúscula.

Embora haja preferências pessoais na escolha do estilo de case, é muito importante adotar um padrão na hora de desenvolver seus códigos e tentar adequar esse padrão com o uso da comunidade.

Por exemplo, na comunidade Python, o Snake Case é mais utilizado para as variáveis e funções, e o Pascal Case para classes. Portanto, é aconselhável, ao trabalhar com Python, utilizar esses estilos.

Isso facilitará a leitura e a colaboração de outras pessoas com o seu código.

Para essa aula, utilizaremos o Snake Case como padrão para os nomes das nossas colunas.

Regex no Python – Expressões Regulares

Para padronizar o nome das nossas colunas, iremos utilizar expressões regulares. Essa é uma abordagem bastante eficiente para transformar os nomes das colunas em um padrão específico.

Para utilizar as expressões regulares, precisaremos importar o módulo re do Python.

import re

Feito isso, vamos criar uma função que recebe uma string e converte essa string para o padrão snake_case.

A lógica dessa função será primeiro separar todas as palavras existentes no nome das colunas por apenas um espaço, substituir esse único espaço por um underscore e converter essa string para minúscula.

Para fazer essas substituições, utilizaremos a função sub do módulo re. Essa função recebe como argumentos o padrão que desejamos buscar na string para substituir, o texto pelo qual desejamos substituir e a string original na qual vamos realizar a substituição.

O primeiro passo será localizar o caractere especial de barra (/) presente nas strings e substituí-lo por um espaço vazio.

import re

def string_to_snake_case(string):
    string = re.sub("/", " ", string)    # substitui / por espaço

Em seguida, vamos substituir múltiplos espaços vazios por apenas um espaço.

import re

def string_to_snake_case(string):
    string = re.sub("/", " ", string)    # substitui / por espaço
    string = re.sub(" +", " ", string)   # substitui múltiplos espaços por um espaço

Perceba que não precisamos especificar a quantidade de espaços existentes. Ao fornecer a expressão ” +”, o Python irá buscar pela ocorrência de 2 ou mais espaços vazios.

Feito isso, podemos pegar todos os espaços vazios e adicionar um underscore no lugar deles.

import re

def string_to_snake_case(string):
    string = re.sub("/", " ", string)    # substitui / por espaço
    string = re.sub(" +", " ", string)   # substitui múltiplos espaços por um espaço
    string = re.sub(" ", "_", string)    # substitui espaço por _

Com isso, só precisamos identificar as palavras que estão escritas juntas, no estilo PascalCase, como a CorDisponivel, e separá-las por um underscore.

Para isso, precisamos identificar um padrão dentro das strings que será uma letra minúscula, seguida por uma letra maiúscula. Identificando esse padrão, vamos separar as palavras por um underscore.

Esse padrão envolve a ideia de grupos, e em expressões regulares, usamos parênteses para definir esses grupos.

No primeiro grupo, definiremos que podemos ter tanto letras minúsculas quanto números. Então criaremos um par de colchetes com a expressão a-z0-9, em que a-z representam todas as letras em minúsculo e 0-9 representam todos os dígitos de 0 a 9.

No segundo parênteses, como só podemos ter as palavras iniciadas por letra maiúscula, definiremos apenas o par de colchetes com a expressão A-Z.

Ou seja, a expressão ([a-z0-9])([A-Z]) indica para o Python que estamos buscando grupos de letras minúsculas ou dígitos, seguidos de letras maiúsculas.

Agora precisamos definir por qual string queremos substituir essa ocorrência. No caso, queremos separar o primeiro grupo do segundo por um underscore. Podemos indicar isso pelo comando: \1_\2.

Porém, no Python, o caractere da barra invertida (\) é um caractere especial, um caractere de escape. Ou seja, quando há a presença desse caractere em uma string, ele é interpretado de forma especial.

Para evitar isso, podemos utilizar a letra r antes do texto, para indicar que essa string precisa ser lida como uma raw string, uma string bruta. Diferente de uma string comum, a raw string é literal, ou seja, os caracteres de escape são tratados como parte da string sem seus significados especiais.

Dessa forma, para que o Python ignore qualquer comando associado à barra invertida, vamos adicionar a letra r antes da expressão “\1_\2”.

import re

def string_to_snake_case(string):
    string = re.sub("/", " ", string)    # substitui / por espaço
    string = re.sub(" +", " ", string)   # substitui múltiplos espaços por um espaço
    string = re.sub(" ", "_", string)    # substitui espaço por _
    string = re.sub("([a-z0-9])([A-Z])", r"\1_\2", string)    # adiciona _ entre letras minúsculas e maiúsculas

Por fim, podemos retornar a string resultante convertendo-a toda em minúscula através do método lower().

import re

def string_to_snake_case(string):
    string = re.sub("/", " ", string)    # substitui / por espaço
    string = re.sub(" +", " ", string)   # substitui múltiplos espaços por um espaço
    string = re.sub(" ", "_", string)    # substitui espaço por _
    string = re.sub("([a-z0-9])([A-Z])", r"\1_\2", string)    # adiciona _ entre letras minúsculas e maiúsculas
    return string.lower()

Com isso, nossa função que converte uma string para o estilo de snake_case está completa.

List Comprehension – Convertendo as Colunas

Para converter o nome das nossas colunas para o estilo de snake_case, precisamos agora aplicar a função a cada coluna do nosso DataFrame.

Para fazer isso, vamos utilizar o list comprehension.

df.columns = [string_to_snake_case(column) for column in df.columns]

df.columns
List Comprehension – Convertendo as Colunas

Dessa forma, as colunas do nosso DataFrame serão atualizadas para o estilo snake_case.

df

Visualizando as colunas

Transformação para PascalCase

Como muitas pessoas também utilizam o PascalCase, vamos ver como também fazer a transformação do nome dessas colunas para PascalCase.

Para isso, reaproveitaremos a nossa função string_to_snake_case, pois é mais fácil converter para PascalCase partindo já de um estilo bem definido e claro como o snake_case, do que tendo que encontrar o padrão manualmente.

No momento, nossas colunas já estão no padrão snake_case, então para converter para PascalCase, precisamos separar as palavras, capitalizar a primeira letra de cada uma e juntá-las novamente.

Podemos fazer isso com o método split, passando como argumento o underscore, e percorrendo cada uma das colunas do nosso DataFrame.

[coluna.split("_") for coluna in df.columns]
Separando as palavras em listas

Perceba que temos uma lista de listas, em que cada lista é composta pelas palavras que formam os nomes das colunas.

A partir disso, vamos capitalizar a primeira letra de cada palavra para que elas comecem com letra maiúscula, utilizando o método capitalize.

E por fim, juntar essas palavras formatadas através do método join. Esse método permite concatenarmos elementos de uma lista em uma única string. Só precisamos fazer a chamada dele a partir da string que será usada como separador.

Como queremos que as palavras fiquem juntas, nosso separador será uma string vazia. Por exemplo, para unirmos as palavras id e usuario, poderíamos fazer da seguinte forma:

"".join(['Id', 'Usuario'])

E como resultado teríamos:

Resultado join

Agora podemos utilizar esses 3 métodos, split, capitalize e join, em uma única função que irá pegar os nomes das colunas após aplicar a função string_to_snake_case e converterá para PascalCase.

Estamos aplicando a função string_to_snake_case dentro da função string_to_pascal_case, para garantir que, independente de como o nome da coluna seja passado, a formatação seja feita.

def string_to_pascal_case(string):
    pascal_case = "".join([palavra.capitalize() for palavra in string_to_snake_case(string).split("_")])
    return pascal_case

Feito isso, podemos aplicar nossa função às colunas, assim como fizemos anteriormente com a função de snake_case, e teremos o resultado desejado.

[string_to_pascal_case(column) for column in df.columns]
PascalCase

Conclusão – Padronização de Nomes de Colunas no Pandas

Nessa aula, você aprendeu como fazer o processo de padronização de nomes de colunas no Pandas, utilizando a criação de funções personalizadas para formatar seguindo algum dos formatos padrão.

Ao criar sua própria função, você pode ajustar e alterar as expressões, tratamentos e substituições das strings de acordo com a sua realidade e com a base de dados com a qual você trabalha.

Padronizar a escrita dos nomes das colunas é um processo muito importante, pois facilita tanto a leitura dos dados quanto a utilização dos recursos do Pandas.

Hashtag Treinamentos

Para acessar outras publicações de Ciência de Dados, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer sair do zero no Python e virar uma referência na sua empresa? Inscreva-se agora mesmo no Python Impressionador