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!