Python na Veia: Domine Dados Caóticos com Facilidade, Planilhas(.xlsx)
- Roger Sampaio
- 12 de abr.
- 6 min de leitura
Olá meus guerreiros. Como estão vocês? Espero que todos bem, porque estou bastante empolgado em compartilhar esse post que certamente fará diferença nos estudos ou trabalho. Saindo do forno a mil, o post está uma 'delícia' para ser desfrutado. Os profissionais que trabalham com dados, sejam cientistas, analistas, engenheiros de dados e afins, devem saber manipulá-los, independente de qual seja a fonte ou tipo como, por exemplo, as planilhas, formato estruturado bastante comum e utilizado. E como já disse outras vezes, 'Python é pau para toda obra', uma linguagem de programação bastante versátil com uma série de pacotes e bibliotecas úteis desenvolvidos pela comunidade técnica global. Por esse motivo tem sido adotado como a linguagem de programação mais usada quando falamos em dados; há pacotes para análise de dados, visualização (construção de gráficos e dashboards), aprendizado de máquina, cargas ETL incluindo também manipulação de planilhas. Exploraremos como 'brincar' com planilhas usando Python. Preparem os cintos, porque vamos decolar.

Um leque de ferramentas
Quando pesquisamos no pip oficial há dezenas de bibliotecas para manipulação de planilhas no formato Excel como, por exemplo: openpyxl, xlrd, xlwt, xlsxwriter, pyxlsb, ezodf, pylightxl incluindo também o famoso pandas. Trabalharemos com pandas nesse post, porém fique a vontade para explorar outras ferramentas. O pandas não é uma biblioteca focada exclusivamente para manipulação de planilhas Excel, embora possibilite. Há uma diferença entre arquivos csv e planilhas Excel. Embora ambos possam ser tratados como tabelas, as planilhas tem em uma estrutura mais complexa permitindo armazenar fórmulas, gráficos, imagens, formatação de células, macro e múltiplas planilhas. Usaremos o pandas na versão 2.2.3.
Para nosso cenário, utilizaremos o Google Colab para abstrair a complexidade da infraestrutura, programas necessários para executar um arquivo notebook. Importante ressaltar que nunca aprendemos a utilizar uma ferramenta como, por exemplo, pandas, somente por usar. Todas as ferramentas existem para ajudar a atender uma necessidade de negócio, através da construção de solução analítica. Guarde bem essa palavra: 'negócio'. Você foi contratado como Cientista de Dados pela empresa Wallmart para ajudar a compreender as vendas e identificar os principais fatores que estão impactando elas negativamente. A base de dados está disponível no Kaggle. A base está em um formato de planilha e contém todas as vendas realizadas no ano de 2010 a 2011.

Brincando com a ferramenta pandas
Além do pandas é necessário também o pacote openpyxl. Logo o primeiro passo é instalá-lo caso não possua em sua máquina. É simples como tirar doce de criança a instalação.

Agora vamos importá-los e confirmar o número da versão.

A planilha 'Walmart_Sales.xlsx' está disponibilizada no Google Drive em uma pasta 'bases', consequentemente necessário conectar o notebook ao drive, caso contrário não ficará visível. Costumo dizer que programar em Python é como escrever uma carta em inglês ao computador. O nome da função que ler planilhas é bem intuitivo e se chama 'pd_read_excel'. Observe:

Contabilizamos um total de 6.435 registros, ou seja, vendas. Para cada venda há a identificação da loja, data, total de vendas, se é feriado ou não, temperatura do ar em Escala Fahrenheit (°F), preço do combustível, índice de preços ao consumidor entre outras informações. A data está no formato de ano-mês-dia como, por exemplo: 2010-02-05.


O método pd.read_excel( ) possibilita ler arquivos do Excel, carregando-os em um DataFrame do pandas. Ele suporta uma série de extensões como: .xls, .xlsx, .xlsm, .xlsb, .odf, .ods e .odt, podendo ler planilhas a partir de um arquivo local ou em uma URL. Suporta uma infinidade de parâmetros para customizar a forma de leitura como, por exemplo, selecionar as subplanilhas de interesse. Importante ressaltar: não recomenda-se decorar nome de funções, visto que a documentação é nossa amiga e deve ser consultada todas as vezes que tivermos dúvidas. Veja a documentação oficial da função aqui. Muita calma nessas horas, meu guerreiro. Programação é como andar de bicicleta, necessário praticar bastante para realmente aprender.
Suponha que tivermos várias subplanilhas. Ao carregarmos a planilha com pd_read_csv( ), devemos utilizar o parâmetro 'sheet_name' seja passando o valor numérico do índice ou nome da subplanilha. Se o parâmetro for omitido, o valor padrão é índice 0, ou seja, a primeira planilha. Veja a execução de ambas as possibilidades.

Outra situação comum é a especificação em qual linha encontra-se o cabeçalho. O mais comum é o cabeçalho estar na primeira linha, porém pode variar. O parâmetro 'header' deve ser utilizando especificando o número da linha do cabeçalho, partindo da premissa que começa a partir de zero. A primeira linha é representada pelo índice 0, a segunda pelo índice 1 e assim sucessivamente. O padrão de valor é 0, ou seja, se o parâmetro for omitido, a primeira linha da planilha será considerada o cabeçalho.

Ao invés de selecionarmos todas as colunas da planilha, podemos usar apenas algumas através do parâmetro 'names'. As colunas de interesse devem ser passadas como uma lista. Se esse parâmetro for omitido, o padrão é o carregamento de todas as colunas.

Por fim podemos limitar a quantidade de registros no momento da carga através do parâmetro 'nrows'. Suponha que queiramos carregarmos apenas os cem registros iniciais. Veja:

Complementando a estratégia de limitação de linhas, podemos limitar a quantidade de linhas a serem puladas no final do arquivo através do parâmetro 'skipfooter'. Curiosamente a palavra skip significa saltar, pular e footer é rodapé, de maneira que o nome do método skipfooter faz jus ao que se propõe fazer. Se o padrão skipfooter não for especificado, o valor padrão é 0, ou seja, não ignorará as linhas finais. Como digo sempre, programar em Python é fácil e gostoso como um pedaço de bolo do chocolate. Temos um total de 6.435 vendas, após eliminarmos as últimas 50 vendas, contabilizamos 6.385. Imprimiremos também as três últimas linhas antes e após o corte para percebemos que ligeiramente são diferentes.


Datas são bastante comuns em bases de dados, uma vez que elas narram a história. Ao carregarmos a base de dados de vendas, perceba que o campo 'Date' venho representado por um valor numérico, embora na planilha a data esteja correta. O que houve, professor? Guerreiro, isso acontece porque o interpretador do Python tenta automaticamente reconhecer os tipos de dados, o que funciona boa parte das vezes, porém há situações que o tipo de dado detectado automaticamente pode não ser o mais adequado. Temos duas opções: 1. convertemos a data de valor inteiro para data ou 2. no momento da carga já carregar esse campo como data. Utilizaremos a segunda opção através do parâmetro 'dates' especificando os campos que são datas. Veja:

O python tenta reconhecer a data, porém ainda pode haver problemas no formato. Então podemos utilizar o parâmetro 'date_parser' que serve para indicar uma função personalizada que converte os dados do tipo data durante o processo de leitura da planilha. Ou seja, resumo da ópera 🧠:
Parâmetro parse_dates indicando quais colunas devem ser tratadas como datas.
Parâmetro date_parser para passar uma função que converte strings para objetos datetime, podendo além de data ter informações de horário também. Observadas as vendas registradas na planilha, o formato é mm/dd/aaaa, sendo 'm' mês, 'd' dia e 'a' ano com quatro dígitos. O formato de data está americano, porque vem primeiro o mês seguido do dia. Implementando teremos:
O parâmetro 'dtype' permite especificar quais tipos de dado serão usados para as colunas alvo no momento da leitura, sendo útil para evitar conversões automáticas indesejadas. Nas planilhas de vendas existe a coluna CPI "Cost Performance Index", que é o índice de desempenho, perceba que a leitura tratou como um valor real. Transformaremos o tipo de dado de CPI, no momento da leitura ele será tratado como uma string. Veja:


E por fim podemos utilizar o comando pd.to_excel( ) para salvar a nova planilha filtrada. No nosso exemplo, suponha que queiramos filtrar as vendas do ano de 2010 e posteriormente salvar. Veja como é simples e prático:


Todas essas manipulações que efetuarmos até o momento, poderiam acontecer após o processo de carga também, ficando critério do cientista de dados optar pela melhor estratégia. Aplicar no momento da leitura, faz que os dados estejam mais limpos e prontos para serem explorados, além de reduzir o tamanho em memória do dataframe. Executar após o processo de carga possibilita documentar e visualizar melhor as etapas de transformações como, por exemplo, comentário célula a célula do notebook, porém pode sobrecarregar a memória se o dataframe for grande demais.
3. E no Final das Contas
Embora trabalhamos apenas com alguns parâmetros no decorrer do artigo, há mais opções para customização da leitura. A ideia não é explorar exaustivamente o método pd_read_excel, mas sim uma explanação breve exemplificando com os parâmetros mais utilizados para as atividades do dia a dia. E se esquecer de como utilizar algum parâmetro, basta consultar a documentação oficial ou ainda usar os famosos agentes de IA como, por exemplo chatGPT. Com a biblioteca pandas, nunca foi tão fácil manipular planilhas. O git da aula está aqui. Beijos e até mais.

Comments