Você sabe como editar linhas em tabelas do Pandas? Aprenda 3 formas diferentes de fazer isso e torne suas consultas mais rápidas!
Se quiser pode acompanhar esse conteúdo em formato de vídeo ou pode acessar o nosso Canal do YouTube para mais vídeos!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Não vamos te encaminhar nenhum tipo de SPAM! A Hashtag Treinamentos é uma empresa preocupada com a proteção de seus dados e realiza o tratamento de acordo com a Lei Geral de Proteção de Dados (Lei n. 13.709/18). Qualquer dúvida, nos contate.
A biblioteca Pandas é uma das mais importantes em Python quando trabalhamos com dados. Ela oferece diversos recursos que permitem aumentar a eficiência do seu código e a velocidade das suas análises de dados.
Hoje, vou te mostrar 3 formas de editar linhas em tabelas do Pandas: operações diretas nas colunas, o uso de loops for e a aplicação da função apply.
Veremos como aplicar cada uma dessas abordagens e comparar o tempo de execução de cada método, para que você possa escolher a melhor opção e otimizar seus códigos de análise de dados.
Durante esta aula, usaremos uma base de dados que contém informações sobre o status de diferentes projetos de uma empresa.
A base inclui detalhes como o código do projeto, o setor responsável, valores orçados e negociados, descontos concedidos, datas de início e término, além do status atual dos projetos.
Para acompanhar esta aula, é importante que você tenha as bibliotecas Pandas e OpenPyXL instaladas no seu computador. Caso não tenha, execute o seguinte comando no terminal do seu editor de código: pip install pandas openpyxl
Feito isso, vamos criar nosso DataFrame utilizando o Pandas e visualizar as informações da nossa base de dados.
import pandas as pd base = pd.read_excel("Base.xlsx") display(base)
Essa é uma base relativamente pequena, com 2633 linhas, mas será suficiente para que você entenda cada uma das formas de editar as linhas de uma tabela e possa avaliar a melhor abordagem.
As operações diretas nas colunas, também chamadas de operações vetorizadas, são a maneira mais eficiente de editar dados em uma tabela do Pandas.
Essa abordagem se aproveita da capacidade do Pandas de manipular colunas inteiras de forma vetorizada, tornando as operações rápidas e eficientes em termos de memória.
Por exemplo, para criar uma nova coluna, você pode realizar operações diretamente nas colunas existentes, como extrair os últimos quatro caracteres da coluna Código do Projeto para gerar uma nova coluna apenas com o número do projeto.
Podemos usar o método .str para manipular strings em uma coluna inteira do DataFrame, extraindo apenas os caracteres finais de cada linha e salvando o resultado em uma nova coluna:
base["Num Projeto"] = base["Código Projeto"].str[3:] display(base)
Essa é a melhor forma de realizar operações em todas as linhas de uma tabela Pandas. As operações vetorizadas são rápidas e eficientes, reduzindo as chances de erro e otimizando o uso da memória do seu computador.
Saiba mais em: Operações Vetorizadas – Deixando Código Pandas Mais Rápido
Em alguns casos, operações vetorizadas podem não ser suficientes para análises mais complexas. Nesses cenários, dois caminhos são possíveis: o uso de loops for ou a função apply.
Muitas vezes, pela familiaridade com a estrutura for, podemos optar por ela para realizar operações mais complexas. No entanto, o loop for é uma abordagem menos eficiente para editar dados em tabelas do Pandas.
Imagine que você precise calcular o percentual de desconto apenas para os projetos finalizados dessa empresa.
Utilizando a abordagem com um loop for, você pode percorrer todas as linhas da tabela, verificando se o valor na coluna Status é Finalizado.
Se for o caso, uma nova coluna será preenchida com o cálculo do percentual de desconto. Caso contrário, o valor inserido será 0.
for linha in base.index: if base.loc[linha, "Status"] == "Finalizado": base.loc[linha, "% Desconto Finalizados"] = base.loc[linha, "Desconto Concedido"] / base.loc[linha, "Valor Orçado"] else: base.loc[linha, "% Desconto Finalizados"] = 0 display(base)
Apesar de a lógica estar correta, essa não é a forma mais eficiente.
Como o Pandas precisa percorrer todas as linhas, verificar condições e aplicar os cálculos individualmente, o desempenho será comprometido, especialmente ao lidar com grandes volumes de dados.
Uma maneira mais eficiente de executar a mesma lógica do loop for é criar uma função e aplicá-la ao DataFrame usando o método apply do Pandas.
Essa função recebe como argumento uma função, que será aplicada ao longo de todo um eixo do DataFrame, e o eixo correspondente, que nesse caso será o eixo 1 (axis=1) referente às linhas.
def calcular_desconto_finalizado(linha): if linha["Status"] == "Finalizado": return linha["Desconto Concedido"] / linha["Valor Orçado"] else: return 0 base["% Desconto Finalizados2"] = base.apply(calcular_desconto_finalizado, axis=1) display(base)
O resultado será o mesmo que o do loop for, mas de uma maneira mais otimizada, rápida e eficiente.
A função apply é recomendada quando precisamos realizar operações complexas em todas as linhas ou colunas de maneira mais eficiente. Ela combina a flexibilidade do for com a eficiência das operações vetorizadas.
Essa abordagem é especialmente indicada para grandes datasets, quando as operações vetorizadas não podem ser utilizadas.
Se você estiver trabalhando no Jupyter Notebook ou no VS Code com a extensão do Jupyter, poderá medir o tempo de execução de cada processo usando o comando %%timeit.
Esse comando especial do Jupyter Notebook serve para cronometrar o tempo de execução de um código. Ele executará a célula de código várias vezes e apresentará a média de tempo gasto.
Medindo o tempo com o loop for:
%%timeit for linha in base.index: if base.loc[linha, "Status"] == "Finalizado": base.loc[linha, "% Desconto Finalizados"] = base.loc[linha, "Desconto Concedido"] / base.loc[linha, "Valor Orçado"] else: base.loc[linha, "% Desconto Finalizados"] = 0
Medindo o tempo com apply:
%%timeit base["% Desconto Finalizados2"] = base.apply(calcular_desconto_finalizado, axis=1)
Embora estejamos lidando com uma base de dados pequena, podemos perceber que a função apply é consideravelmente mais rápida. Essa diferença de tempo se torna ainda mais relevante em bases de dados maiores.
Escolher a melhor forma de editar linhas em tabelas do Pandas é essencial para otimizar seu código e melhorar a performance.
As operações vetorizadas são ideais para manipulações simples e rápidas. O loop for pode ser uma solução para pequenas bases de dados, mas deve ser evitado. Já a função apply é eficiente e flexível, especialmente em grandes datasets.
As operações vetorizadas continuam sendo a melhor opção para manipular dados de maneira eficiente, mas, quando isso não for possível, a função apply é a escolha mais recomendada.
Para saber mais sobre análise de dados, métodos e funções do Pandas, e como se tornar um cientista de dados completo e preparado para o mercado de trabalho, confira o nosso Curso Completo Ciência de Dados Impressionador.
Para acessar outras publicações de Python, clique aqui!
Posts mais recentes de Python
Posts mais recentes da Hashtag Treinamentos
Expert em conteúdos da Hashtag Treinamentos. Auxilia na criação de conteúdos de variados temas voltados para aqueles que acompanham nossos canais.