O .loc seleciona dados usando nomes de linhas e colunas (rótulos), enquanto o .iloc usa índices numéricos (posições). Saiba como usar ambos com exemplos.
Uma das coisas irritantes que todos nós tentamos entender quando aprendemos a usar o Pandas é a distinção entre .loc e .iloc.
Vamos acabar com essa confusão e esclarecer a diferença entre esses dois métodos. Darei vários exemplos e espero que a distinção fique muito mais clara até o final deste blog.
O que são .loc e .iloc no Pandas?
Tanto o .loc quanto o .iloc são atributos essenciais do Pandas DataFrames e ambos são usados para selecionar subconjuntos específicos de dados. Sua finalidade é acessar e permitir a manipulação de uma parte específica do DataFrame em vez de todo o DataFrame.
Recurso
.loc
.iloc
Sintaxe
df.loc[row_indexer, column_indexer]
df.iloc[row_indexer, column_indexer]
Método de indexação
Indexação baseada em rótulos
Indexação baseada em posição
Usado para referência
Rótulos (nomes) de linhas e colunas
Índices numéricos de linhas e colunas (a partir de 0)
Como você pode ver na tabela, a sintaxe é muito semelhante. A diferença está em como usamos os argumentos row_indexer e column_indexer. Isso ocorre porque os dois métodos oferecem abordagens diferentes para indexar os dados: enquanto o .loc indexa com base nos nomes dos rótulos, o .iloc usa o índice de posição numérica de linhas e colunas como argumentos.
Vamos examinar cada um dos dois métodos em detalhes, começando com .loc.
Usando .loc: Seleção por rótulos
Para ilustrar os conceitos, vamos considerar um banco de dados de clientes hipotético representado por este DataFrame chamado df, com o Customer ID representando o índice da linha:
ID do cliente
Nome
País
Região
Idade
C123
John Doe
Estados Unidos
América do Norte
67
C234
Petra Müller
Alemanha
Europa
51
C345
Ali Khan
Paquistão
Ásia
19
C456
Maria Gonzalez
México
América do Norte
26
C567
David Lee
China
Ásia
40
Existem quatro maneiras principais de selecionar linhas com .loc. Isso inclui:
Seleção de uma única linha
Seleção de várias linhas
Selecionando uma fatia de linhas
Seleção condicional de linhas
Seleção de uma única linha usando .loc
Para selecionar uma única linha, usamos o rótulo da linha que queremos recuperar como row_indexer. Dessa forma, a sintaxe é a seguinte: df.loc['row_label']. Vamos usar isso para exibir todas as informações sobre nosso cliente Ali Khan:
Se quisermos selecionar várias linhas que não necessariamente seguem umas às outras em ordem, teremos de passar uma lista de seus rótulos de linha como o argumento row_indexer. Isso significa que precisamos usar não apenas um, mas dois pares de colchetes: um para a sintaxe regular do .loc e outro para a lista de rótulos.
A linha df.loc[['row_label_1', 'row_label_2']] retornará as duas linhas do DataFrame df especificado na lista. Digamos que você queira saber não apenas as informações sobre Ali Khan, mas também sobre David Lee:
Você pode selecionar um intervalo de linhas passando os rótulos da primeira e da última linha com dois pontos no meio: df.loc['row_label_start':'row_label_end']. Poderíamos exibir as quatro primeiras linhas do nosso DataFrame da seguinte forma:
A saída inclui a linha especificada em row_label_end. Isso é diferente em .iloc, que abordaremos mais adiante.
Usamos apenas um par de colchetes, embora queiramos recuperar várias linhas. Não usamos uma lista para especificar as várias linhas, portanto, o uso de dois colchetes retornaria um SyntaxError.
Seleção condicional de linhas usando .loc
Também podemos retornar linhas com base em uma expressão condicional. Podemos filtrar todas as linhas de acordo com o fato de elas atenderem ou não a uma determinada condição e exibir apenas as que atenderem.
A sintaxe correspondente é df.loc[conditional_expression], sendo que conditional_expression é uma declaração sobre os valores permitidos em uma coluna específica.
Para colunas com dados não numéricos (como Name ou Country), a declaração só pode usar o operador igual ou desigual, pois não há ordem entre os valores. Poderíamos, por exemplo, retornar todas as linhas de clientes que não são da Ásia:
Para selecionar colunas, precisamos especificar o argumento column_indexer, que vem depois do argumento row_indexer. Se quisermos especificar apenas o column_indexer, precisaremos marcar de alguma forma que queremos retornar todas as linhas e filtrar apenas as colunas. Vamos ver como você pode fazer isso!
A seleção de uma única coluna pode ser feita especificando o endereço column_indexercom o rótulo da respectiva coluna. Para recuperar todas as linhas, precisamos especificar o endereço row_indexer com dois pontos simples. Chegamos a uma sintaxe parecida com a seguinte: df.loc[:, 'column_name'].
De modo semelhante à seleção de várias linhas, precisamos passar uma lista de rótulos de coluna se quisermos retornar várias colunas de um DataFrame que não necessariamente seguem umas às outras em ordem: df.loc[:, [col_label_1, 'col_label_2']].
Supondo que você queira adicionar o endereço Age de todos os clientes à nossa última saída, isso funcionaria da seguinte forma:
Se você usar dois pontos entre os rótulos de duas colunas, selecionará todas as colunas no intervalo de ordem entre as duas colunas especificadas. Ela inclui a coluna final, o que significa que a coluna chamada col_end também será selecionada na sintaxe padrão, que é a seguinte: df.loc[:, 'col_start':'col_end'].
Se estivéssemos interessados em Name, Country e Region de nossos clientes, nossa linha de código poderia ser:
Também é possível especificar tanto o row_indexer quanto o column_indexer. Isso pode ser usado para recuperar uma única informação, ou seja, uma célula do DataFrame. Para fazer isso, especificamos uma linha e uma coluna usando a sintaxe df.loc['row_label', 'column_name'] .
O caso mais útil é retornar um sub-DataFrame que se concentre exatamente no conjunto de linhas e colunas em que estamos interessados. É possível especificar ambos os indexadores como listas usando colchetes ou como uma fatia usando dois pontos, e até mesmo combiná-los com uma expressão condicional para a seleção de linha.
Aqui está um exemplo de retorno de Name, Country e Region de cada cliente com um Age acima de 30:
.iloc seleciona por posição em vez de rótulo. Essa é a sintaxe padrão para você usar .iloc: df.iloc[row_indexer, column_indexer]. Há dois aspectos especiais que você deve observar:
Contagem começando em 0: A primeira linha e coluna têm o índice 0, a segunda tem o índice 1, etc.
Exclusividade do valor final do intervalo: Ao usar uma fatia, a linha ou coluna especificada atrás dos dois pontos não é incluída na seleção.
Seleção de uma única linha usando .iloc
Uma única linha pode ser selecionada usando o número inteiro que representa o número de índice da linha como row_indexer. Não precisamos de aspas, pois estamos inserindo um número inteiro e não uma cadeia de rótulos, como fizemos com .loc. Para retornar a primeira linha de um DataFrame chamado df, digite df.iloc[0].
Em nosso DataFrame de exemplo, essa mesma linha de código retorna as informações de John Doe:
A seleção de várias linhas funciona em .iloc da mesma forma que em .loc- inserimos os números inteiros do índice de linha em uma lista com colchetes. A sintaxe é a seguinte: df.iloc[[0, 3, 4]].
A respectiva saída em nossa tabela de clientes pode ser vista abaixo:
Para selecionar uma fatia de linhas, usamos dois pontos entre dois números inteiros de índice de linha especificados. Agora, precisamos prestar atenção à exclusividade mencionada anteriormente.
Podemos usar a linha df.iloc[1:4] como exemplo para ilustrar esse conceito. O número de índice 1 significa a segunda linha, portanto, nossa fatia começa ali. O índice inteiro 4 representa a quinta linha, mas como .iloc não é inclusivo para a seleção de fatias, nossa saída incluirá todas as linhas até a última antes desta. Portanto, ele retornará a segunda, terceira e quarta linhas.
A lógica de seleção de colunas usando .iloc segue o que aprendemos até agora. Vamos ver como isso funciona para colunas únicas, várias colunas e fatias de colunas.
Assim como no caso do .loc, é importante que você especifique o row_indexer antes de prosseguir para o column_indexer. Para recuperar os valores da terceira coluna de df para cada linha, digitamos df.iloc[:, 2].
Como Region é a terceira coluna em nosso DataFrame, ela será recuperada como consequência dessa linha de código:
Para selecionar várias colunas que não são necessariamente subsequentes, podemos novamente inserir uma lista contendo números inteiros como column_indexer. A linha df.iloc[:, [0, 3]] retorna a primeira e a quarta colunas.
Em nosso caso, as informações exibidas são Name e Age de cada cliente:
Para a seleção de fatias usando .iloc, a lógica do column_indexer segue a do row_indexer. A coluna representada pelo número inteiro após os dois pontos não é incluída na saída. Para recuperar a segunda e a terceira colunas, a linha de código deve ter a seguinte aparência: df.iloc[:, 1:3].
Essa linha abaixo retorna todas as informações geográficas que temos sobre nossos clientes:
Seleção combinada de linhas e colunas usando .iloc
Podemos juntar o que aprendemos sobre .iloc para combinar a seleção de linhas e colunas. Novamente, é possível retornar uma única célula ou um sub-DataFrame. Para retornar a célula única na interseção da linha 3 e da coluna 4, digitamos df.iloc[2, 3].
Assim como em .loc, podemos especificar ambos os indexadores como listas, usando colchetes, ou como uma fatia, usando dois pontos. Se quisermos selecionar linhas usando expressões condicionais, isso também é tecnicamente possível com .iloc, mas não é recomendado. Usar os nomes dos rótulos e .loc geralmente é muito mais intuitivo e menos propenso a erros.
Esse último exemplo exibe Country, Region e Age para a primeira, segunda e quinta linha em nosso DataFrame:
Em geral, há uma regra geral simples em que a escolha do método depende do conhecimento que você tem do DataFrame:
Use .loc quando você conhece os rótulos (nomes) das linhas/colunas.
Use .ilocquando você souber as posições inteiras das linhas/colunas.
Alguns cenários favorecem o .loc ou o .iloc por sua natureza. Por exemplo, é mais fácil e intuitivo iterar sobre linhas ou colunas usando números inteiros do que rótulos. Como já mencionamos, a filtragem de linhas com base nas condições dos valores das colunas é menos propensa a erros quando você usa os nomes dos rótulos das colunas.
Cenários que favorecem o .loc
Cenários que favorecem o .iloc
Seu DataFrame tem nomes de índice/coluna significativos.
Você está iterando sobre linhas/colunas por sua posição.
Você precisa filtrar com base nas condições dos valores da coluna.
Os nomes de índice/coluna não são relevantes para sua tarefa.
KeyError, NameError e erro de índice com .loc e .iloc
Vamos dar uma olhada nos possíveis problemas. Uma armadilha comum ao usar .loc é encontrar um KeyError. Esse erro ocorre quando tentamos acessar um rótulo de linha ou coluna que não existe em nosso DataFrame. Para evitar isso, precisamos sempre garantir que os rótulos que estamos usando sejam precisos e que correspondam aos rótulos existentes em seu DataFrame e verificar novamente se há erros de digitação.
Além disso, é importante que você sempre use aspas nos rótulos especificados usando .loc. Se você esquecê-las, terá como retorno um NameError.
Pode ocorrer um IndexError ao usar .iloc se especificarmos uma posição inteira que esteja fora do intervalo válido dos índices do nosso DataFrame. Isso acontece quando o índice que você está tentando acessar não existe, seja porque está além do número de linhas ou colunas no DataFrame ou porque é um valor negativo. Para evitar esse erro, verifique as dimensões do DataFrame e use valores de índice apropriados dentro do intervalo válido.
Conclusão
Espero que este blog tenha sido útil e que a distinção entre .loc e .iloc esteja clara para você. Para saber mais, aqui estão algumas boas próximas etapas:
Use o Python Pandas e selecione colunas de DataFrames. Siga nosso tutorial com exemplos de código e aprenda diferentes maneiras de selecionar seus dados hoje mesmo!
Explore a análise de dados com Python. Os DataFrames do Pandas facilitam a manipulação de seus dados, desde a seleção ou substituição de colunas e índices até a remodelagem dos dados.
Aprenda a dividir listas Python com técnicas como slicing, compreensão de listas e itertools. Descubra quando usar cada método para um tratamento ideal dos dados.
Uma das coisas irritantes que todos nós tentamos entender quando aprendemos a usar o Pandas é a distinção entre
.loce.iloc.Vamos acabar com essa confusão e esclarecer a diferença entre esses dois métodos. Darei vários exemplos e espero que a distinção fique muito mais clara até o final deste blog.
O que são .loc e .iloc no Pandas?
Tanto o
.locquanto o.ilocsão atributos essenciais do Pandas DataFrames e ambos são usados para selecionar subconjuntos específicos de dados. Sua finalidade é acessar e permitir a manipulação de uma parte específica do DataFrame em vez de todo o DataFrame.Recurso
.loc
.iloc
Sintaxe
df.loc[row_indexer, column_indexer]
df.iloc[row_indexer, column_indexer]
Método de indexação
Indexação baseada em rótulos
Indexação baseada em posição
Usado para referência
Rótulos (nomes) de linhas e colunas
Índices numéricos de linhas e colunas (a partir de 0)
Como você pode ver na tabela, a sintaxe é muito semelhante. A diferença está em como usamos os argumentos
row_indexerecolumn_indexer. Isso ocorre porque os dois métodos oferecem abordagens diferentes para indexar os dados: enquanto o.locindexa com base nos nomes dos rótulos, o.ilocusa o índice de posição numérica de linhas e colunas como argumentos.Vamos examinar cada um dos dois métodos em detalhes, começando com
.loc.Usando .loc: Seleção por rótulos
Para ilustrar os conceitos, vamos considerar um banco de dados de clientes hipotético representado por este DataFrame chamado
df, com oCustomer IDrepresentando o índice da linha:ID do cliente
Nome
País
Região
Idade
C123
John Doe
Estados Unidos
América do Norte
67
C234
Petra Müller
Alemanha
Europa
51
C345
Ali Khan
Paquistão
Ásia
19
C456
Maria Gonzalez
México
América do Norte
26
C567
David Lee
China
Ásia
40
Existem quatro maneiras principais de selecionar linhas com
.loc. Isso inclui:Seleção de uma única linha usando .loc
Para selecionar uma única linha, usamos o rótulo da linha que queremos recuperar como
row_indexer. Dessa forma, a sintaxe é a seguinte:df.loc['row_label']. Vamos usar isso para exibir todas as informações sobre nosso cliente Ali Khan:C345
Nome
Ali Khan
País
Paquistão
Região
Ásia
Idade
19
Seleção de várias linhas usando .loc
Se quisermos selecionar várias linhas que não necessariamente seguem umas às outras em ordem, teremos de passar uma lista de seus rótulos de linha como o argumento
row_indexer. Isso significa que precisamos usar não apenas um, mas dois pares de colchetes: um para a sintaxe regular do.loce outro para a lista de rótulos.A linha
df.loc[['row_label_1', 'row_label_2']]retornará as duas linhas do DataFramedfespecificado na lista. Digamos que você queira saber não apenas as informações sobre Ali Khan, mas também sobre David Lee:ID do cliente
Nome
País
Região
Idade
C345
Ali Khan
Paquistão
Ásia
19
C567
David Lee
China
Ásia
40
Selecionando uma fatia de linhas usando .loc
Você pode selecionar um intervalo de linhas passando os rótulos da primeira e da última linha com dois pontos no meio:
df.loc['row_label_start':'row_label_end']. Poderíamos exibir as quatro primeiras linhas do nosso DataFrame da seguinte forma:ID do cliente
Nome
País
Região
Data de registro
C123
John Doe
Estados Unidos
América do Norte
67
C234
Petra Müller
Alemanha
Europa
51
C345
Ali Khan
Paquistão
Ásia
19
C456
Maria Gonzalez
México
América do Norte
26
Há duas coisas que você deve ter em mente aqui:
row_label_end. Isso é diferente em.iloc, que abordaremos mais adiante.SyntaxError.Seleção condicional de linhas usando .loc
Também podemos retornar linhas com base em uma expressão condicional. Podemos filtrar todas as linhas de acordo com o fato de elas atenderem ou não a uma determinada condição e exibir apenas as que atenderem.
A sintaxe correspondente é
df.loc[conditional_expression], sendo queconditional_expressioné uma declaração sobre os valores permitidos em uma coluna específica.Para colunas com dados não numéricos (como
NameouCountry), a declaração só pode usar o operador igual ou desigual, pois não há ordem entre os valores. Poderíamos, por exemplo, retornar todas as linhas de clientes que não são da Ásia:ID do cliente
Nome
País
Região
Idade
C123
John Doe
Estados Unidos
América do Norte
67
C234
Petra Müller
Alemanha
Europa
51
C456
Maria Gonzalez
México
América do Norte
26
Seleção de uma única coluna usando .loc
Para selecionar colunas, precisamos especificar o argumento
column_indexer, que vem depois do argumentorow_indexer. Se quisermos especificar apenas ocolumn_indexer, precisaremos marcar de alguma forma que queremos retornar todas as linhas e filtrar apenas as colunas. Vamos ver como você pode fazer isso!A seleção de uma única coluna pode ser feita especificando o endereço
column_indexercom o rótulo da respectiva coluna. Para recuperar todas as linhas, precisamos especificar o endereçorow_indexercom dois pontos simples. Chegamos a uma sintaxe parecida com a seguinte:df.loc[:, 'column_name'].Vamos exibir o endereço
Namede cada cliente:ID do cliente
Nome
C123
John Doe
C234
Petra Müller
C345
Ali Khan
C456
Maria Gonzalez
C567
David Lee
Seleção de várias colunas usando .loc
De modo semelhante à seleção de várias linhas, precisamos passar uma lista de rótulos de coluna se quisermos retornar várias colunas de um DataFrame que não necessariamente seguem umas às outras em ordem:
df.loc[:, [col_label_1, 'col_label_2']].Supondo que você queira adicionar o endereço
Agede todos os clientes à nossa última saída, isso funcionaria da seguinte forma:ID do cliente
Nome
Idade
C123
John Doe
67
C234
Petra Müller
51
C345
Ali Khan
19
C456
Maria Gonzalez
26
C567
David Lee
40
Seleção de uma fatia de colunas usando .loc
Se você usar dois pontos entre os rótulos de duas colunas, selecionará todas as colunas no intervalo de ordem entre as duas colunas especificadas. Ela inclui a coluna final, o que significa que a coluna chamada
col_endtambém será selecionada na sintaxe padrão, que é a seguinte:df.loc[:, 'col_start':'col_end'].Se estivéssemos interessados em
Name,CountryeRegionde nossos clientes, nossa linha de código poderia ser:ID do cliente
Nome
País
Região
C123
John Doe
Estados Unidos
América do Norte
C234
Petra Müller
Alemanha
Europa
C345
Ali Khan
Paquistão
Ásia
C456
Maria Gonzalez
México
América do Norte
C567
David Lee
China
Ásia
Seleção combinada de linhas e colunas usando .loc
Também é possível especificar tanto o
row_indexerquanto ocolumn_indexer. Isso pode ser usado para recuperar uma única informação, ou seja, uma célula do DataFrame. Para fazer isso, especificamos uma linha e uma coluna usando a sintaxedf.loc['row_label', 'column_name'].O caso mais útil é retornar um sub-DataFrame que se concentre exatamente no conjunto de linhas e colunas em que estamos interessados. É possível especificar ambos os indexadores como listas usando colchetes ou como uma fatia usando dois pontos, e até mesmo combiná-los com uma expressão condicional para a seleção de linha.
Aqui está um exemplo de retorno de
Name,CountryeRegionde cada cliente com umAgeacima de 30:ID do cliente
Nome
País
Região
C123
John Doe
Estados Unidos
América do Norte
C234
Petra Müller
Alemanha
Europa
C567
David Lee
China
Ásia
Usando .iloc: Seleção por posição inteira
.ilocseleciona por posição em vez de rótulo. Essa é a sintaxe padrão para você usar.iloc:df.iloc[row_indexer, column_indexer]. Há dois aspectos especiais que você deve observar:Seleção de uma única linha usando .iloc
Uma única linha pode ser selecionada usando o número inteiro que representa o número de índice da linha como
row_indexer. Não precisamos de aspas, pois estamos inserindo um número inteiro e não uma cadeia de rótulos, como fizemos com.loc. Para retornar a primeira linha de um DataFrame chamadodf, digitedf.iloc[0].Em nosso DataFrame de exemplo, essa mesma linha de código retorna as informações de John Doe:
C123
Nome
John Doe
País
Estados Unidos
Região
América do Norte
Idade
67
Seleção de várias linhas usando .iloc
A seleção de várias linhas funciona em
.ilocda mesma forma que em.loc- inserimos os números inteiros do índice de linha em uma lista com colchetes. A sintaxe é a seguinte:df.iloc[[0, 3, 4]].A respectiva saída em nossa tabela de clientes pode ser vista abaixo:
ID do cliente
Nome
País
Região
Idade
C123
John Doe
Estados Unidos
América do Norte
67
C456
Maria Gonzalez
México
América do Norte
26
C567
David Lee
China
Ásia
40
Selecionando uma fatia de linhas usando .iloc
Para selecionar uma fatia de linhas, usamos dois pontos entre dois números inteiros de índice de linha especificados. Agora, precisamos prestar atenção à exclusividade mencionada anteriormente.
Podemos usar a linha
df.iloc[1:4]como exemplo para ilustrar esse conceito. O número de índice 1 significa a segunda linha, portanto, nossa fatia começa ali. O índice inteiro 4 representa a quinta linha, mas como.ilocnão é inclusivo para a seleção de fatias, nossa saída incluirá todas as linhas até a última antes desta. Portanto, ele retornará a segunda, terceira e quarta linhas.Vamos provar que a linha funciona como deveria:
ID do cliente
Nome
País
Região
Idade
C234
Petra Müller
Alemanha
Europa
51
C345
Ali Khan
Paquistão
Ásia
19
C456
Maria Gonzalez
México
América do Norte
26
Seleção de uma única coluna usando .iloc
A lógica de seleção de colunas usando
.ilocsegue o que aprendemos até agora. Vamos ver como isso funciona para colunas únicas, várias colunas e fatias de colunas.Assim como no caso do
.loc, é importante que você especifique orow_indexerantes de prosseguir para ocolumn_indexer. Para recuperar os valores da terceira coluna dedfpara cada linha, digitamosdf.iloc[:, 2].Como
Regioné a terceira coluna em nosso DataFrame, ela será recuperada como consequência dessa linha de código:ID do cliente
Região
C123
América do Norte
C234
Europa
C345
Ásia
C456
América do Norte
C567
Ásia
Seleção de várias colunas usando .iloc
Para selecionar várias colunas que não são necessariamente subsequentes, podemos novamente inserir uma lista contendo números inteiros como
column_indexer. A linhadf.iloc[:, [0, 3]]retorna a primeira e a quarta colunas.Em nosso caso, as informações exibidas são
NameeAgede cada cliente:ID do cliente
Nome
Idade
C123
John Doe
67
C234
Petra Müller
51
C345
Ali Khan
19
C456
Maria Gonzalez
26
C567
David Lee
40
Selecionando uma fatia de colunas usando .iloc
Para a seleção de fatias usando
.iloc, a lógica docolumn_indexersegue a dorow_indexer. A coluna representada pelo número inteiro após os dois pontos não é incluída na saída. Para recuperar a segunda e a terceira colunas, a linha de código deve ter a seguinte aparência:df.iloc[:, 1:3].Essa linha abaixo retorna todas as informações geográficas que temos sobre nossos clientes:
ID do cliente
País
Região
C123
Estados Unidos
América do Norte
C234
Alemanha
Europa
C345
Paquistão
Ásia
C456
México
América do Norte
C567
China
Ásia
Seleção combinada de linhas e colunas usando .iloc
Podemos juntar o que aprendemos sobre
.ilocpara combinar a seleção de linhas e colunas. Novamente, é possível retornar uma única célula ou um sub-DataFrame. Para retornar a célula única na interseção da linha 3 e da coluna 4, digitamosdf.iloc[2, 3].Assim como em
.loc, podemos especificar ambos os indexadores como listas, usando colchetes, ou como uma fatia, usando dois pontos. Se quisermos selecionar linhas usando expressões condicionais, isso também é tecnicamente possível com.iloc, mas não é recomendado. Usar os nomes dos rótulos e.locgeralmente é muito mais intuitivo e menos propenso a erros.Esse último exemplo exibe
Country,RegioneAgepara a primeira, segunda e quinta linha em nosso DataFrame:ID do cliente
País
Região
Idade
C123
Estados Unidos
América do Norte
67
C234
Alemanha
Europa
51
C567
China
Ásia
40
.iloc vs .loc: Quando usar o Which
Em geral, há uma regra geral simples em que a escolha do método depende do conhecimento que você tem do DataFrame:
.locquando você conhece os rótulos (nomes) das linhas/colunas..ilocquando você souber as posições inteiras das linhas/colunas.Alguns cenários favorecem o
.locou o.ilocpor sua natureza. Por exemplo, é mais fácil e intuitivo iterar sobre linhas ou colunas usando números inteiros do que rótulos. Como já mencionamos, a filtragem de linhas com base nas condições dos valores das colunas é menos propensa a erros quando você usa os nomes dos rótulos das colunas.Cenários que favorecem o .loc
Cenários que favorecem o .iloc
Seu DataFrame tem nomes de índice/coluna significativos.
Você está iterando sobre linhas/colunas por sua posição.
Você precisa filtrar com base nas condições dos valores da coluna.
Os nomes de índice/coluna não são relevantes para sua tarefa.
KeyError, NameError e erro de índice com .loc e .iloc
Vamos dar uma olhada nos possíveis problemas. Uma armadilha comum ao usar
.locé encontrar umKeyError. Esse erro ocorre quando tentamos acessar um rótulo de linha ou coluna que não existe em nosso DataFrame. Para evitar isso, precisamos sempre garantir que os rótulos que estamos usando sejam precisos e que correspondam aos rótulos existentes em seu DataFrame e verificar novamente se há erros de digitação.Além disso, é importante que você sempre use aspas nos rótulos especificados usando
.loc. Se você esquecê-las, terá como retorno umNameError.Pode ocorrer um
IndexErrorao usar.ilocse especificarmos uma posição inteira que esteja fora do intervalo válido dos índices do nosso DataFrame. Isso acontece quando o índice que você está tentando acessar não existe, seja porque está além do número de linhas ou colunas no DataFrame ou porque é um valor negativo. Para evitar esse erro, verifique as dimensões do DataFrame e use valores de índice apropriados dentro do intervalo válido.Conclusão
Espero que este blog tenha sido útil e que a distinção entre
.loce.ilocesteja clara para você. Para saber mais, aqui estão algumas boas próximas etapas: