quarta-feira, 22 de julho de 2020

Encadeando métodos das séries do Pandas

Na linguagem python é possível chamar métodos usando o acesso a atributos. As variáveis apontam para objetos e os atributos e métodos retornam mais objetos. Assim podemos fazer chamadas sequenciais de métodos usando atributos. Pandas é uma biblioteca que faz bom uso dessa programação de fluxo. Muitos métodos e atributos criam séries e dataframes, que por sua vez podem criar mais séries e dataframes. E desses objetos mais métodos e atributos podem ser chamados.
Como exemplo de encadeamento de métodos, vamos usar a frase: Uma pessoa vai ao restaurante comer costelas, volta pra casa, lava o carro e depois assiste TV.
Uma forma de codificar essa frase em python:

(pessoa.ir('Restaurante')
.pede('Costela')
.come('Costela')
.ir('Casa')
.lavar('Carro')
.assistir('TV')
)

Nesse exemplo, a pessoa é uma instância de uma classe que pode chamar métodos. E cada método pode criar outra instância, desse jeito o encedeamento ocorre. No exemplo acima, o argumento passado para o método define como o método deve ser executado.
Nesse post vamos aprender como o encadeamento funciona nas séries do Pandas.

Como fazer...

Primeiro vamos extrair uma coluna do dataset e encadear métodos da série:

>>> import pandas as pd
>>> filmes = pd.read_csv('filmes.csv', encoding='latin-1')
>>> diretor = filmes.Diretor
>>> diretor.value_counts().head(5)
LENILDO MAURICIO DA SILVA    218
JULIANO COSTA BENDAZOLI       69
JOSE ANTONIO GASPAR RAMOS     39
ROGER LEMOS                   26
LENILDO MAURÍCIO DA SILVA     22
Name: Diretor, dtype: int64

Nesse exemplo, chamamos o método value_counts(). Esse método retorna uma série contendo os elementos da série progenitora com a quantidade de vezes que o valor aparece na série. E logo em seguida chamamos o método head(5), que cria uma nova série com os cinco primeiros elementos retornados pelo método value_counts(). Pode não parecer mais a cada chamada de método criamos uma série nova.
Uma consequência do encadeamento de métodos e atributos é a dificuldade na hora de fazer a depuração. Isso acontece porque nenhum dos resultados dos métodos é guardado numa variável. Num encadeamento muito longo fica difícil encontrar o local do erro, se acontecer algum (e vai.). Uma dica para minimizar esse tipo de erro é colocar o resultado da chamada do método numa variável separada e depurar o seu código linha a linha.

0 comentários:

Postar um comentário