Domine a transformação de dados em Pandas com essas três técnicas úteis

Um mergulho na filtragem, manipulação e funcionamento

Foto por Milad Fakurian on Unsplash

Pense na última vez em que você trabalhou com um conjunto de dados bem formatado. Colunas bem nomeadas, valores ausentes mínimos e organização adequada. É uma sensação agradável — quase libertadora — ser abençoado com dados que você não precisa limpar e transformar.

Bem, é bom até você sair do seu devaneio e voltar a mexer na confusão desesperada de linhas quebradas e rótulos sem sentido à sua frente.

Não existem dados limpos (em sua forma original). Se você é um cientista de dados, você sabe disso. Se você está apenas começando, você deve aceitar isso. Você precisará transformar seus dados para trabalhar com eles de maneira eficaz.

Vamos falar sobre três maneiras de fazer isso.

Filtragem – mas explicada corretamente

Vamos falar sobre filtragem – mas um pouco mais profundamente do que você está acostumado a fazer. Como uma das operações de transformação de dados mais comuns e úteis, a filtragem eficaz é uma habilidade obrigatória para qualquer cientista de dados. Se você conhece Pandas, provavelmente é uma das primeiras operações que aprendeu a fazer.

Vamos revisar, usando meu exemplo favorito e estranhamente versátil: um DataFrame de notas de alunos, apropriadamente chamado grades:

Imagem do autor

Filtraremos quaisquer pontuações abaixo de 90, porque neste dia decidimos ser educadores mal treinados que atendem apenas aos melhores alunos (por favor, nunca façam isso). A linha de código padrão para fazer isso é a seguinte:

notas[notas['Pontuação'] >= 90]
Imagem do autor

Isso nos deixa com Jack e Hermione. Legal. Mas o que exatamente aconteceu aqui? Sua marca a linha de código acima funciona? Vamos nos aprofundar um pouco mais observando a saída da expressão dentro dos colchetes externos acima:

notas['Pontuação'] >= 90
Imagem do autor

Ah ok. Isso faz sentido. Parece que esta linha de código retorna um objeto Pandas Series que contém Boolean ( True / False ) valores determinados pelo que >= 90 retornado para cada linha individual. Esta é a principal etapa intermediária. Posteriormente, é esta série de booleanos que é passada para os colchetes externos e filtra todas as linhas de acordo.

Para completar, mencionarei também que o mesmo comportamento pode ser alcançado usando o loc palavra-chave:

notas.loc[notas['Pontuação'] >= 90]
Imagem do autor

Existem vários motivos pelos quais podemos optar por usar loc (uma delas é que na verdade nos permite filtrar linhas e colunas por meio de uma única operação), mas isso abre uma caixa de Pandora de operações do Pandas que é melhor deixar para outro artigo.

Por enquanto, o importante objetivo de aprendizado é este: quando filtramos no Pandas, a sintaxe confusa não é algum tipo de mágica estranha. Precisamos simplesmente dividi-lo em duas etapas componentes: 1) obter uma série booleana das linhas que satisfazem nossa condição e 2) usar a série para filtrar todo o DataFrame.

Por que isso é útil, você pode perguntar? Bem, de modo geral, é provável que isso leve a bugs confusos se você apenas usar operações sem entender como elas realmente funcionam. A filtragem é uma operação útil e incrivelmente comum, e agora você sabe como funciona.

Vamos continuar.

A beleza das funções Lambda

Às vezes, seus dados exigem transformações que simplesmente não estão integradas à funcionalidade do Pandas. Por mais que tente, nenhuma quantidade de varredura no Stack Overflow ou a exploração diligente da documentação do Pandas revela uma solução para o seu problema.

Insira as funções lambda – um recurso de linguagem útil que se integra perfeitamente ao Pandas.

Como uma revisão rápida, veja como funcionam os lambdas:

>>> add_function = lambda x, y: x + y
>>> add_function(2, 3)
5

As funções lambda não são diferentes das funções regulares, exceto pelo fato de terem uma sintaxe mais concisa:

  • Nome da função à esquerda do sinal de igual
  • A lambda palavra-chave à direita do sinal de igual (semelhante ao def palavra-chave em uma definição de função tradicional do Python, isso permite que o Python saiba que estamos definindo uma função).
  • Parâmetro(s) após o(s) lambda palavra-chave, à esquerda dos dois pontos.
  • Valor de retorno à direita dos dois pontos.

Agora, vamos aplicar funções lambda a uma situação realista.

Os conjuntos de dados geralmente têm suas próprias peculiaridades de formatação, específicas para variações na entrada e coleta de dados. Como resultado, os dados com os quais você está trabalhando podem ter problemas estranhamente específicos que você precisa resolver. Por exemplo, considere o conjunto de dados simples abaixo, que armazena os nomes das pessoas e os seus rendimentos. Vamos chamá-lo monies.

Imagem do autor

Agora, como Altezas de Dados Mestres desta empresa, recebemos algumas informações ultrassecretas: todos nesta empresa receberão um aumento de 10% mais US$ 1000 adicionais. Este é provavelmente um cálculo muito específico para encontrar um método específico, mas bastante simples com uma função lambda:

update_income = lambda num: num + (num * 10) + 1000

Então, tudo o que precisamos fazer é usar esta função com o Pandas apply função, que nos permite aplicar uma função a cada elemento da Série selecionada:

dinheiro['Nova Renda'] = dinheiro['Renda'].apply(update_income)
dinheiro
Imagem do autor

E terminamos! Um novo e brilhante DataFrame que consiste exatamente nas informações que precisávamos, tudo em duas linhas de código. Para ser ainda mais conciso, poderíamos até ter definido a função lambda dentro de apply diretamente – uma dica interessante que vale a pena ter em mente.

Vou manter o ponto aqui simples.

Lambdas são extremamente úteis e, portanto, você deve usá-los. Aproveitar!

Funções de manipulação de strings em série

Na seção anterior, falamos sobre a versatilidade das funções lambda e todas as coisas interessantes que elas podem ajudar você a realizar com seus dados. Isto e excelente, mas a você deve ter cuidado para não se deixar levar. É incrivelmente comum ficar tão envolvido com uma maneira familiar de fazer as coisas que você perde atalhos mais simples com os quais o Python abençoou os programadores. Isso se aplica a mais do que apenas lambdas, é claro, mas vamos ficar com isso por enquanto.

Por exemplo, digamos que temos o seguinte DataFrame chamado names que armazena o nome e o sobrenome das pessoas:

Imagem do autor

Agora, devido às limitações de espaço em nosso banco de dados, decidimos que, em vez de armazenar o sobrenome completo de uma pessoa, é mais eficiente simplesmente armazenar a inicial do sobrenome. Assim, precisamos transformar o 'Last Name' coluna de acordo. Com lambdas, nossa tentativa de fazer isso pode ser semelhante a esta:

nomes['Sobrenome'] = nomes['Sobrenome'].apply(lambda s: s[:1])
nomes
Imagem do autor

Isso claramente funciona, mas é um pouco desajeitado e, portanto, não é tão pitônico quanto poderia ser. Felizmente, com a beleza das funções de manipulação de strings no Pandas, existe outra maneira mais elegante (para o propósito da próxima linha de código, vá em frente e assuma que ainda não alteramos o 'Last Name' coluna com o código acima):

nomes['Sobrenome'] = nomes['Sobrenome'].str[:1]
nomes
Imagem do autor

Ta-da! O .str A propriedade de uma série Pandas nos permite unir cada string da série com uma operação de string especificada, como se estivéssemos trabalhando com cada string individualmente.

Mas espere, fica melhor. Desde .str efetivamente nos permite acessar a funcionalidade normal de uma string por meio da Série, também podemos aplicar uma variedade de funções de string para ajudar a processar nossos dados rapidamente! Por exemplo, digamos que decidimos converter ambas as colunas em minúsculas. O código a seguir faz o trabalho:

nomes['Nome'] = nomes['Nome'].str.lower()
nomes['Sobrenome'] = nomes['Sobrenome'].str.lower()
nomes
Imagem do autor

Muito mais simples do que passar pelo incômodo de definir suas próprias funções lambda e chamar as funções de string dentro delas. Não que eu não ame lambdas — mas tudo tem seu lugar, e a simplicidade deve sempre ter prioridade em Python.

Abordei apenas alguns exemplos aqui, mas uma grande coleção de funções de string está à sua disposição [1].

Use-os liberalmente. Eles são excelentes.

Considerações finais e recapitulação

Aqui está uma pequena folha de dicas sobre transformação de dados para você:

  1. Filtre como você quis dizer. Aprenda o que realmente está acontecendo para saber o que está fazendo.
  2. Ame suas lambdas. Eles podem ajudá-lo a manipular dados de maneiras incríveis.
  3. Pandas adora cordas tanto quanto você. Há muitas funcionalidades integradas – você também pode usá-las.

Aqui vai um último conselho: não existe uma maneira “correta” de filtrar um conjunto de dados. Depende dos dados disponíveis e também do problema específico que você deseja resolver. No entanto, embora não exista um método definido que você possa seguir sempre, há uma coleção útil de ferramentas que vale a pena ter à sua disposição. Neste artigo, discuti três deles.

Eu encorajo você a sair e encontrar mais alguns.

Referências

[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas

Transformação de dados mestre em Pandas com essas três técnicas úteis republicadas da fonte https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-two-useful-techniques-20699f03e51d?source=rss—-7f60cf5620c9— 4 via https://towardsdatascience.com/feed

<!–

->

Carimbo de hora:

Mais de Consultores Blockchain