Fala meu povo, bora dar continuidade em nossos estudos pois o tempo não para e camarão de que dorme a onda leva!
Trago hoje para vocês um tutorial que serve de complemento do último onde falamos sobre o método loc. Mais fique tranquilo, se você não leu, segue o link.
Neste tópico, vamos abordar uma outra forma de filtrar dados em um Pandas DataFrame porém dessa vez vamos usar o método iloc em Python.
Quando tratamos do método loc, explicamos que ele é baseado em labels, ou seja, nomes de linhas e colunas), já o o método iloc é baseado em índice inteiro para linhas e colunas.
De forma resumida, temos o seguinte cenário:
Método iloc obtém linhas (ou colunas) através de posições no índice (portanto, somente valores inteiros);
Método loc obtém linhas (ou colunas) através de labels (nomes de linhas e colunas) do índice.
Vamos dar uma pausa no blá-blá-bla e mãos a obra!
Nesse post, vamos usar o DataFrame do tópico anterior.
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 execução do script acima, nosso DataFrame foi criado com sucesso. Diante do sucesso na execução do script, que tal realizarmos o primeiro exemplo?
Precisamos filtrar os dados dos índices 1 e 2 (Dica: ele deverá filtrar a segunda e a terceira linhas do DataFrame). Ahhhhhhhhhhh, ficou fácil né?
dfTimes.iloc[[1,2]]
Um breve comentário sobre o script acima!
Baseado na explicação anterior, o método iloc obtém linhas (ou colunas) através de posições no índice. Com isso, devemos passar o índice inteiro das linhas como um argumento para o método iloc filtrar as linhas do DataFrame.
Uma pausa antes de escrever! Quando falamos em índices em Python é importante ressaltar que iniciam sempre em 0 e como precisamos filtrar os dados da segunda e da terceira linha e a posição correspondente será respectivamente 1 e 2.
Pronto, agora vamos para o segundo exemplo!
Pense que seu analista solicitou que sejam retornados os dados das linhas 2, 3 e 4 e da primeira e a última coluna.
De forma semelhante ao loc, o método iloc permite que sejam filtradas linhas e colunas, lembrando que não passamos nomes de colunas, devem ser informados os seus respectivos índices. Vamos analisar o script abaixo.
dfTimes.iloc[[1, 2, 3], [0, 2]]
Nesse exemplo, filtramos a primeira e a última coluna, ou seja, Equipe e Estado da 2ª a 4ª linha do DataFrame que representa os índices 1 ao 3, não esqueça que o índice começa sempre em zero.
No próximo exemplo, vamos aplicar a técnica de slice ou fatiamento usando iloc! De forma semelhante, o seu analista solicitou que fossem extraídos dados do segundo e 9 time e de todas as colunas.
dfTimes.iloc[1:10,0:3]
Nesse exemplo, buscamos filtrar as linhas referentes aos índices 1 à 10 e colunas dos índices 0 à 3.
Uma grande observação sobre o método iloc!
Quando aplicamos o slice ou fatiamento, ele não é inclusivo para a última posição, ou seja, no nosso exemplo colocamos da 1:10, nesse caso serão retornados os dados da posição 1 até a 9, por isso falamos que não é inclusiva. Mesma explicação serve para colunas!
Observe o script abaixo.
dfTimes.iloc[1:10,0:3]
Ele fez um slice do índice 1 ao 10, agora observe o retorno. Foram retornados valores até o índice 9, ou seja, o 10 não é incluído.
E agora observe a coluna. Selecionamos da 0 (primeira coluna) até a 3 (quarta coluna).
Mais como assim?
Simples! Nosso método não irá retornar um erro caso você informe um índice inexistente, ele entende que é pra ir até o último.
Outro ponto importante! Quando escolhemos o método de fatiamento (slice) não precisamos colocar os valores de índices de linhas e colunas entre colchetes. Essa abordagem deve ser utilizada apenas quando estivermos separando os índices por virgula, conforme o primeiro exemplo.
Seguindo os trabalhos, vamos falar de uma outra forma de aplicar o método iloc.
Nesse exemplo, surgiu a necessidade de apresentar apenas os três primeiros registros do nosso DataFrame, como fazer?
# devolve as 3 primeiras linhas
dfTimes.iloc[:3]
E em outro exemplo, precisamos retornar os dados a partir de uma determinada posição.
# devolve a partir da 3 linha
dfTimes.iloc[3:]
E por último, foi solicitado que filtrassem todos os times do RJ, e agora? Como fazer?
Calma, muita calma, primeiro vamos criar uma coluna chamada UF e em seguida aplicar sobre ela o nosso filtro.
dfTimes['UF'] = dfTimes.Estado.str.slice(-2)
Muito bem!!! Coluna criada com sucesso, agora vamos filtrar todos os times do RJ! Mais vamos com muita calma! Eu escolhi esse exemplo pois ele pode ser uma pegadinha de mal gosto. Analisem comigo...
Imagina se o seu código ficasse igual ao meu.
dfTimes.iloc[:,3]=='RJ'
Esse seria seu retorno! Posso afirma q errado não está, porém não vai atender muito a necessidade. Então vamos melhora-lo!
Para retornar os valores, precisamos coloca-lo dentro do nosso DataFrame.
dfTimes[dfTimes.iloc[:,3]=='RJ']
E observem agora o retorno! Fantástico!
É uma forma mais complexa quando compararmos com o método loc.
Bem pessoal, concluímos aqui a nossa abordagem ao método iloc. Diante do que passamos, é possível afirmar que os casos de uso do iloc são mais restritos, sendo assim, ele é menos utilizado que loc.
De forma bem sucinta, ele é usado quando queremos selecionar dados de linhas e colunas pelo seu valor numérico de índice.
Ambos recursos são bem úteis, porém o loc destaca-se por ser mais versátil, pois podemos selecionar colunas pela nomenclatura delas o que torna o trabalho mais fácil e intuitivo.
Quando utilizamos o iloc dependemos dos números dos índices, o que afasta mais a sua utilização.
E para finalizar, existe um outro método de seleção chamado ix, porém não irei comenta-lo pois foi descontinuado. Caso queira saber mais sobre o ix, basta comentar no post deixando seu e-mail que entro em contato para comentar e trocar alguns exemplos práticos.
Espero que tenham gostado, aguardo você próximo!
Abaixo o notebook usado em nosso post!
Deixo o link da documentação oficial como referencia!
Comments