As Principais Funções do Pandas que TODOS Deveriam Saber

Enzo Delcompare
Data Hackers
Published in
9 min readAug 11, 2021

Uma introdução a manipulação de dados com a biblioteca pandas.

Como podemos fazer para utilizar o pandas em nossos projetos?

Inicialmente, teremos que fazer a importação da biblioteca pandas. Nessa importação, damos um apelido para a biblioteca! O apelido é pd, além de ser uma convenção utilizada por toda a comunidade e documentação do pandas, é também uma forma de reduzirmos a escrita do nosso script.

Como é representado uma tabela de dados no pandas?

Uma tabela de dados no pandas, é conhecida por DataFrame. Apesar do nome ser diferente, “DataFrame”, a estrutura é aquela padrão que conhecemos, como a de uma matriz, ou se preferir, como a de alguns SGBD’s (Sistema de Gerenciamento de Banco de Dados) ou planilhas Excel. Um DataFrame é composto por linhas e colunas, e podermos inserir dados de tipos diferente.

No final, é tudo a mesma coisa! 😉

DataFrame: https://pandas.pydata.org/docs/_images/01_table_dataframe.svg

Como podemos criar um DataFrame?

Para criarmos um DataFrame, podemos utilizar um dicionário de dados e depois convertê-lo para um DataFrame! Mas, como o Python é uma linguagem de programação incrível, podemos fazer essa conversão no ato da criação. Para ficar de forma mais didática, farei as duas formas.

Mas, após o processo, ele se transformou em um DataFrame:

Agora, faremos da outra forma! Onde a conversão e realizada no ato da criação… Olha que beleza, até rimou! 😅

Ok, até aqui entendi, mas, com o pandas é possível trabalharmos com outros tipos de arquivos de dados?

SIM! É possível trabalharmos com vários tipos de arquivos de dados.

Leitura e conversão: https://pandas.pydata.org/docs/_images/02_io_readwrite.svg

Existe uma grande quantidade de arquivos que podemos manipular com o pandas. E, além de fazer essas transformações e tratamentos, também podemos converter o resultado final, em diversos tipos de arquivos de dados. Por exemplo, na imagem acima! 👆

Como exemplo da manipulação de arquivo de dados em formato diferente do que criamos anteriormente (digo “formato diferente”, mas, também como dito anteriormente, o pandas irá tratar como DataFrame! 😅), irei utilizar o dataset Operações Indiretas Automáticas, que está em formato .csv e é disponibilizado pelo BNDES (Banco Nacional de Desenvolvimento Econômico e Social) no Portal Brasileiro de Dados Abertos.

Para realizarmos essa façanha, se você também estiver utilizando o Google Colaboratory, lembre-se, terá que colocar o dataset em seu Google Drive, e após isso, no menu lateral esquerdo do Colab, em Arquivos, você terá que clicar no ícone (Montar Drive) que é uma pasta com a logo do Google Drive. Após isso, um pop-up aparecerá, com a seguinte mensagem: “A conexão com o Google Drive permite que o código executado neste notebook modifique arquivos na plataforma até que o acesso seja revogado.”, clique em “Conectar ao Google Drive” e pronto! 😎

IMPORTANTE! Não faça o upload do arquivo nesse momento, pois, não irei utilizar todas a colunas do dataset… Mas, fique tranquilo, abaixo colocarei o dicionário de dados apenas com as colunas que utilizarei. 😅

Chega de conversa, vamos colocar a mão na massa!

Como prometido, abaixo temos o dicionário de dados apenas com as colunas que utilizarei para criar os exemplos:

Como fazemos para manipular o dataset baixado?

Mãos a obra! Como sabemos que o nosso dataset está no formato .xlsx, iremos utilizar a função read_excel(), para realizar a leitura e guardar em uma variável:

Agora, vamos ver o resultado disso, imprimido na tela a nossa variável df_dados:

Que tal explorarmos esses dados?

Bom, a partir de agora serei mais direto na execução dos exemplos! Se por acaso eu achar que é necessário realizar uma explicação mais detalhada de algum processo, assim farei. 🤓

Imprimindo as primeiras linhas:

Por padrão, a função head()mostra as 5 primeiras linhas. Se quisermos fazer o inverso disso, ou seja, mostrar as 5 últimas linhas, usamos a função tail():

Mas, podemos alterar esse comportamento! Em ambos os casos, head()ou tail(), se passarmos como parâmetro, entre os parênteses, o número de linhas que queremos ver, ele irá nos mostrar. Por exemplo:

Uma forma de visualizarmos a dimensão do nosso DataFrame, é utilizando a seguinte forma:

(2668, 10)

Analisando as informações da nossas colunas:

Notem! Ao executarmos a função describe(), trouxe informações apenas de duas colunas! Isso ocorre, pois, nos mostra apenas as informações de colunas que são numéricas… Nesse caso, valor_da_operacao_em_reais e juros.

O describe(), está nos mostrando uma estatística do nossos dados, por exemplo:

  • A média (mean) do valor_da_operacao_em_reais, é de R$ 5.177,18
  • A maior (max) taxa de juros, é de 13.52%
  • E, o menor (min) valor_da_operacao_em_reais, é de R$ 90,00

Vamos ver como fazemos para mostrar apenas uma coluna do DataFrame:

Notem! Conforme pedimos, ele nos mostrou a coluna municipio, mas, de uma forma diferente da que vimos até agora! 🤔

Isso ocorre, pois, as colunas são consideradas Series de dados… Podemos entender melhor isso, executando o comando abaixo:

pandas.core.series.Series

E, para ficar visualmente exemplificado, temos a imagem abaixo:

Serie: https://pandas.pydata.org/docs/_images/01_table_series.svg

Agora, vamos pedir para que nos mostre duas colunas, municipio e uf:

Conforme dito no início, sobre o número identificador de cada linha, vamos mostrar os dados contidos na linha 0:

No [] da função loc, passando apenas um número como argumento, trazemos os dados da linha! Conforme vimos acima… Mas, se passarmos, por exemplo, [0:10], traremos linhas e colunas do índice 0 ao 10:

Um outro teste… Mostrando apenas as linhas pares nos índices de 0 ao 10:

Notem! Temos um pequeno problema em nosso dataset, ele se encontra na coluna uf

Existem espaços em branco! Para corrigirmos isso, utilizaremos a função replace(), com ela, nós substituiremos os espaços em branco ‘ ’, por espaço vazio ‘’:

Pronto! Bem melhor assim… Dessa forma, podemos fazer alguns testes! Por exemplo, filtrar todos os dados do estado de São Paulo, e criar um novo dataset, df_dados_SP:

Agora, vamos mostrar apenas as colunas cliente, uf e municipio do estado de São Paulo! Mas, faremos isso em nosso dataset original, o df_dados:

Se quisermos ver um registro específico do nosso dataset, utilizamos a seguinte forma:

Mostrando o valor que está na linha 2 da coluna valor_da_operacao_em_reais
2146

Notem! No exemplo acima, pedimos para ver o registro da coluna valor_da_operacao_em_reais na linha de índice 2… Com isso, nos trouxe o valor R$ 2.146,00.

Agora, iremos criar uma nova coluna em nosso dataset… O nome da nova coluna será valor_do_juros_em_reais, nela, como o próprio nome sugere, guardaremos o juros convertido em reais:

Após a criação da coluna valor_do_juros_em_reais, criaremos mais uma coluna, chamada valor_total_da_operacao_em_reais, onde faremos a soma das colunas valor_da_operacao_em_reais e valor_do_juros_em_reais:

Como pudemos ver até agora, tudo o que utilizamos é de alta utilidade para tratarmos os nossos dados! Mas, agora vamos unir dois dataset… Iremos unir o nosso df_dados, com uma continuação dele, ou seja, imagine que essa continuação são os novos lançamentos do BNDES… 🤯

Parece ser complexo, mas, só parece mesmo!

Como já sabemos, iremos carregar o novo dataset, tratar os espaços em branco da coluna uf e por fim, utilizar a função append() para fazermos essa união:

Como podemos observar na imagem acima, o nosso dataset têm 10.000 linhas! 😱

Porém, essa união nos gerou um problema… As novas colunas que criamos, valor_do_juros_em_reais e valor_total_da_operacao_em_reais, estão com valor NaN (Not a Number), que são os valores ausentes…

Existem várias formas de tratarmos isso, mas, para praticarmos, vamos excluir essas colunas e criá-las posteriormente! Primeiro, excluiremos as colunas valor_do_juros_em_reais e valor_total_da_operacao_em_reais:

Aproveitando, irei demonstrar como faríamos para realizar a exclusão de outras formas.

Excluindo apenas uma linha:

Pontos para observarmos nesse resultado:

  1. No parâmetro axis, 0 é para linha e 1 para coluna;
  2. Nosso dataset tinha 10000 registros, e ao pedirmos para excluir apenas uma linha, ele ficou com 9998… 🤔 O que aconteceu?

Aconteceu, que ao fazer os append() anteriormente, os índices foram repetidos, ou seja, temos dois índices 0.

Seguindo o nosso exemplo de exclusão, agora vamos ver como excluímos uma linha ou coluna completamente vazia (que não é o nosso caso)!

Se for excluir apenas coluna, fazemos da seguinte forma:

Podemos também, excluir linhas que possuem ao menos um valor ausente:

No caso de valores ausentes, poderíamos preencher com a média da coluna!

Para isso, criaremos um dataset com o nome df_dados_media, criaremos a coluna valor_do_juros_em_reais, faremos a união do df_dados_media com df_dados_2:

Notem! A coluna valor_do_juros_em_reais, foi criada, mas, existem valores ausentes nela… Agora, iremos substituir esses valores, pela média da coluna:

Pronto! 😃

Agora que sabemos como preencher os valores ausentes com a média da coluna, vamos seguir o nosso plano original, que é fazer o append() com o dataset df_dados_2 e criar as colunas que havíamos excluído anteriormente…

Após a criação das colunas, vamos verificar quantos registros o dataset possui por estado:

Agora, vamos verificar o valor total de valor_da_operacao_em_reais, valor_do_juros_em_reais e valor_total_da_operacao_em_reais, agrupadas por uf:

Fazendo a média de valor_da_operacao_em_reais por uf:

Estamos chegando ao fim! 🥺

Mas, antes de finalizarmos, iremos carregar um novo dataset! Nele, contém as regiões de cada estado do Brasil.

O motivo de carregarmos esse dataset, é para que possamos realizar um merge()! Ou seja, iremos criar em nosso dataset df_dados, um nova coluna com a região pertencente ao estado… Basicamente, ele funciona como um =PROCV():

--

--