top of page
  • Foto do escritorGabriel Quintella

Python com Pandas, o fantástico método LOC

Dando continuidade em nossos posts sobre Python, hoje vamos abordar um pouco da biblioteca Pandas mais especificamente o método loc que é bem útil quando precisamos realizar a manipulação de dados.


Em busca uma definição sobre o que seria o método loc, fui na documentação oficial (link no fim desse posto) e encontrei a seguinte descrição:


O loc é um método de dataframe e série, o que significa que podemos chamar o método loc em qualquer um desses objetos Pandas. Ao usar o método loc em um dataframe, especificamos quais linhas e colunas queremos usando o seguinte formato: dataframe.loc [linhas especificadas: colunas especificadas] Fonte: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.loc.html

Vamos começar então a colocar a mão na massa!


Primeiro passo é realizar a importação da biblioteca Pandas e Numpy. Estou apenas usando a Numpy para inclusão de valores nulos no dataframe.


import pandas as pd
import numpy as np

Concluída a importação, vamos criar nosso DataFrame.


dfTimes=pd.DataFrame([
['América Mineiro','Belo Horizonte','Minas Gerais MG'],
['Cruzeiro','Belo Horizonte','Minas Gerais MG'],
['Atlético Mineiro','Belo Horizonte','Minas Gerais MG'],
['Corinthians','São Paulo','São Paulo SP'],
['Flamengo','Rio de Janeiro','Rio de Janeiro RJ'],
['Fluminense','Rio de Janeiro','Rio de Janeiro RJ'],
['Palmeiras','São Paulo','São Paulo SP'],
['Red Bull Bragantino','Bragança Paulista','São Paulo SP'],
['Santos','Santos','São Paulo SP'],
['São Paulo','São Paulo','São Paulo SP'],
['Vasco','Rio de Janeiro','Rio de Janeiro RJ'],
['Ceará','Ceará',np.nan],
['Fortaleza','Ceará',np.nan]
], 
columns=['Equipe','Cidade','Estado'])

Após a criação, vamos verificar como que os dados foram importados, ou melhor, como que ficou o nosso DataFrame.


Para isso executamos o script abaixo:


dfTimes


Muito bom! Dataframe criado, agora vamos explorar os dados usando o método loc da biblioteca Pandas.


De acordo com a descrição da documentação oficial, ao usar o método loc em um dataframe, especificamos quais linhas e colunas queremos usando o seguinte formato:


dataframe.loc [linhas especificadas: colunas especificadas] 

Vamos analisar algumas possibilidades de utilização do método loc.


Em nosso primeiro exemplo, queremos retornar todas as informações como Equipe, Cidade, Estado do primeiro time. Para isso basta executar o script abaixo.


dfTimes.loc[1]


Já no segundo exemplo, podemos pedir que ele nos retorne as mesmas informações para vários times. Nesse caso, vamos pedir para retornar os registros dos índices 1, 3 e 5.


dfTimes.loc[[1,3,5]]


É possível selecionar vários índices e várias colunas de uma vez só. Para que isso venha ocorrer, basta passarmos uma lista com os índices e uma outra lista com as colunas.


Nessa lógica, vamos usar a estrutura que explicamos acima DataFrame.loc[linhas especificadas: colunas especificadas]. Observe o exemplo abaixo.


Pense que precisamos extrair do nosso dataframe as informações de Equipe e Cidade para os registros dos índices 1, 3 e 5.


dfTimes.loc[[1,3,5], ['Equipe','Cidade']]


E se o nosso objetivo for retornar as informações de Equipe e Cidade para todos os registros do nosso dataframe, faremos da seguinte forma:


dfTimes.loc[:, ['Equipe','Cidade']]


Uma outra possibilidade bem bacana que o método loc proporciona é a realização de um slice ou fatiamento, que nada mais é do que pegar um range de informações dentro de um dataframe. Sua sintaxe é bem simples, df.loc[start : stop], onde o start é o limite inicial e está incluído (não esqueçam isso) na saída e o stop é o limite final e não é incluído (não esqueçam isso, reparou a diferença?) na saída, isso não é observado no nosso DataFrame pois o nosso índice se inicia em 1 e não em zero como na maioria dos casos.


Vamos pedir para o pandas nos retornar os times que estão entre o índice 3 e 6.


dfTimes.loc[3:6]


No exemplo acima o índice do time foi incrementado de 1 em 1 que é o padrão, mais podemos fazer com que isso seja incrementado de 2 em 2 por exemplo. A sintaxe é parecida com a anterior só precisamos passar explicitamente o parâmetro step (valor incremental) da seguinte maneira: df.loc[start : stop : step].


dfTimes.loc[0:6:2]


E para selecionar do 3° até o último time, passamos somente o primeiro valor seguido de dois pontos.


dfTimes.loc[3:]


Vamos fazer um slice nas linhas e ao mesmo tempo selecionar algumas colunas.


dfTimes.loc[1:5, ['Equipe','Cidade']]


Uma outra possibilidade de utilização do método loc, é a utilização dele também para filtrar uma lista de registros. Vamos imaginar que você necessite extrair todos os registros (times) que são dos estados RJ e SP. Antes disso, vamos criar uma coluna chamada UF em nosso dataframe, para isso vamos executar o script de criação, é bem simples, observem ai!


dfTimes['UF'] = dfTimes.Estado.str.slice(-2)

Agora sim, vamos aplicar nosso filtro!


dfTimes.loc[dfTimes['UF'].isin(['RJ','SP']), ['Equipe','Cidade']]


Está ficando bom, você está gostando? Bora analisar outro caso. Imagine que durante essa sua análise você se deparou com o seguinte problema. Existem times que não possuem a coluna UF preenchida, ou seja, nula (sem valor). Como que você filtraria de forma rápida esses valores?


Primeiro vamos usar o comando info() para chegar ao entendimento de que existem valores nulos na coluna UF.


Destaquei na imagem acima a informação que precisamos. Observe que em nosso dataframe existem 13 registros e na coluna UF existem 11 non-null, ou seja, 11 preenchidos. Vamos a nossa caça desses 2 nulos! Mãos a obra.


Vamos usar a combinação da função isnull() para buscar essa informação.


dfTimes.loc[dfTimes['UF'].isnull(), ['Equipe','Cidade']]


E ao contrário, filtrar todos os registro que estão com a coluna UF preenchida, usando a função notnull() vejam o exemplo.


dfTimes.loc[dfTimes['UF'].notnull(), ['Equipe','Cidade']]


Outra possibilidade também é a criação de um outro dataframe a partir do nosso dataframe principal.


Para esse ponto, vamos criar um dataframe com os times do RJ.


dfTimesRJ = dfTimes.loc[dfTimes['UF'] == 'RJ', ['Equipe','Cidade','UF']]
dfTimesRJ 


Nesse exemplo, aproveitamos e explicamos também como conseguimos filtrar alguns registros de um dataframe.


Resumindo esse tópico, apresentamos o método loc disponíveis na biblioteca Pandas que auxilia em muito na manipulação de dados.


No próximo tópico vamos abordar o método iloc que é bem parecido com o loc, espero que tenham gostado, espero vocês no próximo!


Link para download do notebook utilizado nesse post.








319 visualizações0 comentário

Posts recentes

Ver tudo

Comments


bottom of page