Customizando suas tabelas no Pandas

Aprenda a customizar e melhorar a apresentação dos seus dataframes.


Introdução

Este artigo é uma continuação da nossa série sobre a biblioteca Pandas, se você ainda não leu os outros dois primeiros artigos vou deixar os links aqui: 

Como sabemos, Pandas é uma ferramenta fundamental para análise de dados em Python, entretanto, nem sempre é a forma mais fácil para customizar a apresentação e fornecer uma melhor visualização antes de compartilhar com o público mais amplo. Nesta postagem, vamos explorar como usar alguns recursos que podem melhorar a apresentação dos dados direto no Pandas e de repente economizar o tempo que você gastaria fazendo isso em outras ferramentas.

Pandas desenvolveu uma API de estilo em 2019, essa API possui um objeto Styler que tem alguns métodos muito úteis para customização de dataframes. Existem dois métodos principais que são o Styler.applymap – aplica o estilo aos elementos do dataframe e o Style.apply – aplica o estilo as colunas/linhas ou no dataframe inteiro.

Customizando com Pandas

Vamos colocar a mão na massa e explorar alguns estilos. Começamos carregando o nosso dataset de exemplo, neste artigo vamos usar o dataset Sample Sales Data, que está disponível no kaggle gratuitamente. Este dataset reúne uma amostra de dados sobre vendas, com informações do país, estado, preço do item vendido, quantidade, data da compra e etc.

import pandas as pd 

df = pd.read_csv('sales_data_sample.csv', sep=',', engine='python')

df.head()

Após fazer o download do csv e carregar devidamente os dados em um dataframe, iremos realizar algumas transformações para que nossa tabela seja mais legível, desta forma teremos as colunas e valores em português. Note que modificamos apenas algumas colunas, pois iremos selecionar um recorte dos dados na nossa análise de exemplo.

df.rename(
    columns={'YEAR_ID' : 'ANO', 'DEALSIZE' : 'TAMANHO', 'SALES': 'VENDAS'},
    inplace=True
)
df['TAMANHO'] = df['TAMANHO'].replace(
    {'Large': 'Grande', 'Medium': 'Médio', 'Small': 'Pequeno'}
)

Em seguida vamos utilizar uma função do pandas chamada pivot_table, caso você não esteja familiarizado com o conceito de tabelas pivot, aqui tem uma explicação em alto nível, mas basicamente é uma forma de organizar os dados, sumarizando alguns valores e realizando agregações de forma simples.

pivot = pd.pivot_table(df, index = ['ANO', 'TAMANHO'],
                       values = 'VENDAS', aggfunc = 'sum') 
pivot

Agora que temos nossa tabela com o recorte dos dados que precisamos vamos começar a customizar. No nosso dataframe a coluna “VENDAS”  representa o total do valor das vendas em determinada moeda, entretanto, a formatação dos valores não deixa isso claro. Vamos explorar como melhorar isso.

pivot.style.format({'VENDAS':'R$ {:,.0f}'})

Bem melhor, não é mesmo? Existem diferentes formas de se aplicar a formatação dos valores, confira outros exemplos:

  • Float com 2 casas decimais: {:.2f}

  • Adicionar 0 a esquerda: {:0>2d}

  • Percentual com 2 casas decimais: {:.2%}

Outro estilo que podemos utilizar é a formatação condicional que nos permite destacar valores com base no seu conteúdo. Por exemplo, se quisermos destacar todas as vendas que foram superiores a R$ 1.000.000 , é possível fazer isso com o método applymap passando uma função como veremos abaixo.

def destaca_maiores_valores(valor): 
   cor = 'blue' if valor > 1000000 else 'black' 
   return f'color: {cor}'

pivot_highlight = pivot.style.applymap(destaca_maiores_valores)
pivot_highlight

E podemos também encadear os estilos unindo as duas formatações ao mesmo tempo.

pivot_highlight = pivot.style.applymap(destaca_maiores_valores)\
    .format({'VENDAS':'R$ {:,.0f}'}) 
pivot_highlight

Agora digamos que queremos destacar apenas o menor e o maior valor da nossa coluna de vendas, é possível fazermos usando o applymap que já mostramos, mas o Pandas torna isso ainda mais simples com métodos prontos para isso. No exemplo abaixo nós passamos o nome das cores, mas também é possível passar os valores em hexadecimal para ter um resultado mais específico.

pivot_highlight = pivot.style.format({'VENDAS':'R$ {:,.0f}'})\
   .highlight_max(color='green')\
   .highlight_min(color='red')

pivot_highlight

Outro método muito interessante para quando precisamos comparar os valores uns com os outros é o background_gradient que fornece um gradiente de cores do maior para o menor valor.

import matplotlib

pivot.style.background_gradient(cmap='Greens')

E por fim, outra forma de ilustrar a relação entre os valores de uma coluna é adicionando barras coloridas.

pivot.style.format({'VENDAS':'R$ {:,.0f}'}).bar(color='Green')
 

As barras ajudam a ter uma comparação de escala de forma simples, também é possível usar o parâmetro align=center para ter as barras alinhadas à esquerda se os valores forem negativos e a direita se forem positivos.

Depois de passarmos um tempo criando estilos você pode querer aproveitá-los, Pandas torna isso simples, por exemplo, se tivermos dois dataframes, podemos reutilizar o estilo do primeiro no segundo da seguinte forma:

estilo1.style.format({'VENDAS':'R$ {:,.0f}'}).bar(color='Green') 
estilo2.use(estilo1.export())

 

Considerações finais

O objetivo deste artigo foi mostrar como é possível aplicar alguns estilos para deixar as suas tabelas ainda mais legíveis e visualmente mais atraentes, aprendemos como adicionar estilos de forma condicional aos elementos, escala de cores e barras. De qualquer forma, a customização dos dados é limitada e se você precisar fazer algo mais elaborado talvez precise de outras ferramentas mais sofisticadas. Espero ter ajudado, deixe a sua opinião nos comentários, até uma próxima!
 

Se Inscreva Na Nossa Newsletter Tenha Acesso Aos Melhores Artigos