Formatação condicional em Python

E vamos de mais um post hoje para quem está migrando de Excel para Python. Na verdade, serve para cada um, mas sinto que saber a função deste post é algo que ex-usuários do Excel gostariam de saber. Vamos aprender a formatar a tabela, mudar cor de fundo, cor das letras, dentre outras coisas. Todas essas mudanças vão ser motivadas por alguns condicionais. Logo, o título, formatação condicional em Python!

INTRODUZINDO O DATASET

Primeiro, vamos construir nosso dataset para praticar. Para facilitar, vou importar o dataset do Fifa 19, filtrar algumas colunas que acho mais interessantes e pegar uma amostra com 10 elementos:

import pandas as pd

fifa19 = pd.read_csv('fifa19.csv')
fifa19 = fifa19[['ID', 'Name', 'Age','Overall', 'Potential']].sample(n=10, random_state=9999)

fifa19

COMO UTILIZAR O STYLE

O segredo da formatação condicional está na propriedade .style. Basta você aplicar ela ao dataset e escolher que tipo de estilo você quer. Vamos ver um exemplo bem básico, onde construímos uma função que retorna ‘color: red’ e ‘color: black’, a depender da condição:

def separa_velho_e_jovem(value):
color = 'red' if value <= 25 else 'black'
return 'color: %s' % color

fifa19[['Age']].style.applymap(separa_velho_e_jovem)

A ideia é bem simples, nossa função determina que se a pessoa tiver igual ou menos de 25 anos, nós vamos marcá-la de vermelho, caso contrário de preto. Além disso, você pode fazer essa formatação mantendo as outras colunas do dataset usando o parâmetro subset:

def separa_velho_e_jovem(value):
color = 'red' if value <= 25 else 'black'
return 'color: %s' % color

fifa19.style.applymap(separa_velho_e_jovem, subset=['Age'])

ALTERANDO PARA O APPLY

O applymap funciona olhando elemento a elemento. Agora, imagine que você queira marcar o maior valor da coluna. Mais do que isso, ao invés de trocarmos a cor da fonte, vamos mudar a cor de fundo do maior valor, deixando-o em destaque. Aqui, você deve usar o apply, para olhar a coluna toda, e o background-color, para mudar a cor de fundo:

def highlight_max(s):
is_max = s == s.max()
return ['background-color: yellow' if v else '' for v in is_max]

fifa19.style.apply(highlight_max, subset=['Age', 'Overall','Potential'])

Podemos ainda aplicar as duas formatações juntas:

# APLICANDO OS DOIS JUNTOS
fifa19.style.\
    applymap(separa_velho_e_jovem, subset=['Age']).\
    apply(highlight_max, subset=['Age', 'Overall','Potential'])

OUTRAS FUNCIONALIDADES PARA FORMATAÇÃO

Por fim, queria encerrar o post mostrando a capacidade do .style de alterar até o formato dos números, e também de outras funcionalidades como o background_gradient(), para montar um heatmap; o set_caption(), para inserir um título; e o hide_index(), para esconder o índice:

# Formatar a tabela com style: Formatacao dos campos, trata como heatmap, inclui titulo, esconde indice
fifa19.style.format({
"Age": "{:,.0f} yrs", # acrescentando algo depois no nome
"Overall":"{:,.3f}"})\
.background_gradient(cmap='viridis')\
.set_caption('Exemplo de Formatação')\
.hide_index()

Em suma, você deve ficar atento aos métodos e funcionalidades que o Python permite que você aplique a dataframes do pandas. Em princípio, style é o mais conectado à formatação condicional. Mas não deixe de se ligar nos outros também!

E aí? Gostou do conteúdo? Se inscreva para receber as novidades! Deixe seu e-mail em INSCREVA-SE na barra à direita, logo abaixo de pesquisar. E, por favor, não deixe de comentar, dar seu feedback e, principalmente, compartilhar com seus amigos. De verdade, isso faz toda a diferença. Além disso, você também pode acompanhar mais do meu trabalho seguindo a conta de Twitter @EstatSite ou por alguma das redes que você encontra em Sobre o Estatsite / Contato, como meu canal de Youtube Canal do Yukio. E se você gosta de tecnologia, escute o Pitacotech!

Bons estudos!

Deixe um comentário

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