LOC vs ILOC em Pandas: Diferença entre LOC e ILOC em Pandas
Publicados: 2020-08-01Índice
Loc e iloc em Pandas
Uma causa comum de confusão entre os novos desenvolvedores Python é loc vs. iloc. Ambos parecem altamente semelhantes e executam tarefas semelhantes. Portanto, isso pode confundir qualquer aluno.
Se você quer descobrir a diferença entre iloc e loc, você veio ao lugar certo, pois neste artigo vamos discutir este tópico em detalhes. Você descobrirá qual é a principal diferença entre essas funções e as verá em ação para entender melhor o conceito. Confira nossos cursos de ciência de dados para saber mais sobre o Pandas.
Vamos começar.
Diferença entre loc e iloc
1. iloc em Python
Você pode usar iloc em Python para seleção. É baseado em localização inteira e ajuda você a selecionar pela posição. Portanto, se você deseja encontrar a linha com índice 5, o iloc mostrará a quinta linha do quadro de dados, independentemente de seu nome ou rótulo.
Aqui está um exemplo de iloc em Python:
>>> mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
… {'a': 100, 'b': 200, 'c': 300, 'd': 400},
… {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]
>>> df = pd.DataFrame(mydict)
>>> df
abcd
0 1 2 3 4
1 100 200 300 400
2 1000 2000 3000 4000
Indexaremos as linhas com um inteiro escalar usando a função iloc para o dataframe acima:
>>> tipo(df.iloc[0])
<class 'pandas.core.series.Series'>
>>> df.iloc[0]
um 1
b 2
c 3
d 4
Nome: 0, dtype: int64
2. local em Pandas
Você pode usar loc em Pandas para acessar várias linhas e colunas usando rótulos; no entanto, você também pode usá-lo com uma matriz booleana.
Se você usar loc para encontrar uma linha com índice 5, não obterá a quinta linha com ela. Em vez disso, você receberá apenas a linha que tem o nome '5'.
Aqui está um exemplo de loc em Pandas:
>>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
… index=['cobra', 'viper', 'sidewinder'],
… colunas=['max_speed', 'escudo'])
>>> df
escudo max_speed
cobra 1 2
víbora 4 5
sidewinder 7 8
A tabela acima foi da qual extrairemos a linha:
>>> df.loc['viper']
max_speed 4
escudo 5
Nome: víbora, dtype: int64
Exemplo detalhado para loc vs iloc
Embora usemos ambas as funções para seleção, seria melhor se discutíssemos um exemplo detalhado para entender suas distinções.
Em nosso exemplo, usaremos o conjunto de dados do cliente de telecomunicações, que está disponível no kaggle. Vamos adicioná-lo a um quadro de dados:
df = pd.read_csv(“Projects/churn_prediction/Telco-Customer-Churn.csv”)
df.head()
identificação | Gênero sexual | Sr. Cidadão | Parceiro | Dependentes | posse | Telefone | Várias linhas | Internet | Segurança | |
0 | 7590-VHVEG | Fêmea | 0 | sim | Não | 1 | Não | Sem telefone | DSL | Não |
1 | 5575-GNVDE | Macho | 0 | Não | Não | 34 | sim | Não | DSL | sim |
2 | 3668-QPYBK | Macho | 0 | Não | Não | 2 | sim | Não | DSL | sim |
Este conjunto de dados tem 21 colunas; mostramos apenas alguns para fins de demonstração. Como já discutimos, usamos loc para selecionar os dados pelo rótulo. Aqui, os nomes das colunas são seus rótulos de coluna, como gênero, posse, OnlineSecurity; todos eles são os nomes das colunas, bem como os rótulos.
Como não atribuímos nenhum índice específico, os pandas criariam um índice inteiro para as linhas por padrão. Os rótulos de linha são inteiros, que começam em 0 e aumentam. Neste exemplo, veremos como loc e iloc se comportam de forma diferente.
- Selecione a linha “1” e a coluna “Parceiro”
df.loc[1, 'Parceiro']
Saída: 'Não'
Mostra o valor presente na coluna 'Parceiro' da linha '1'.
- Selecione os rótulos de linha '4' e as colunas 'customerID' e 'gender'
df.loc[:4, ['customerID', 'gender']]
Identificação do Cliente | Gênero sexual | |
0 | 7590-VHVEG | Fêmea |
1 | 5575-GNVDE | Macho |
2 | 3668-QPYBK | Macho |
3 | 7795-CFOCW | Macho |
4 | 9237-HQITU | Fêmea |
- Selecione os rótulos de linha “1”, “2”, “3” e a coluna “Dependentes”
df.loc[[1,2,3], 'Dependentes']
1 Não
2 Não
3 Não
Nome: Dependentes, dtype: object
Desta vez, filtraremos o dataframe e aplicaremos iloc ou loc:
- Selecione rótulos de linha para as colunas "10" e "PhoneService" e "InternetService" de um cliente que tem um parceiro (o parceiro deve ser 'sim')
df [df.Partner == 'Sim'].loc:10, ['PhoneService', 'InternetService']]
No caso acima, aplicamos um filtro ao banco de dados, mas não alteramos o índice, de modo que nossa saída omitiu vários rótulos das linhas que nosso filtro exigia. Então, usando loc[:10] aqui, selecionamos as linhas que tinham rótulos até “10”.
Se, por outro lado, usarmos o iloc aqui e aplicarmos o filtro, obteremos 10 linhas, pois o iloc seleciona por posição, independentemente dos rótulos. Aqui está o resultado que obteremos se aplicarmos iloc[:10]:

df[df.Partner == 'Sim'].iloc[:10, [6,8]]
Serviço de telefone | Serviço de internet | |
0 | Não | DSL |
8 | sim | Fibra ótica |
10 | sim | DSL |
12 | sim | Fibra ótica |
15 | sim | Fibra ótica |
18 | sim | DSL |
21 | sim | Não |
23 | sim | DSL |
24 | sim | DSL |
26 | sim | Fibra ótica |
Você deve ter notado que temos que mudar nosso método para selecionar colunas.
Leia: Tutorial do Python Pandas
- Selecione as primeiras 5 colunas e primeiras 5 linhas com iloc
df.iloc[:4, :4]
Identificação do Cliente | Gênero sexual | Cidadão Sênior | Parceiro | |
0 | 7590-VHVEG | Fêmea | 0 | sim |
1 | 5575-GNVDE | Macho | 0 | Não |
2 | 3668-QPYBK | Macho | 0 | Não |
3 | 7795-CFOCW | Macho | 0 | Não |
Podemos usar iloc para selecionar posições a partir do final. Para isso, simplesmente teremos que usar inteiros negativos (-1, -2, etc.) e começar com eles.
- Selecione as últimas 5 colunas e as últimas 5 linhas
df.iloc[-5:, -5:]
Faturamento sem papel | Forma de pagamento | Cobranças Mensais | Custos totais | Churn | |
7038 | sim | Cheque enviado | 84,80 | 1990,5 | Não |
7039 | sim | Cartão de crédito | 103,20 | 7362,9 | Não |
7040 | sim | Cheque eletrônico | 29,60 | 346,45 | Não |
7041 | sim | Cheque enviado | 74,40 | 306,6 | sim |
7042 | sim | Transferência bancária | 105,65 | 6844,5 | Não |
Você também pode usar a função lambda com iloc. (Uma função lambda é uma pequena função anônima em Python que pode ter uma única expressão, mas qualquer número de argumentos)
- Selecione cada terceira linha até a 15ª e mostre apenas as colunas “serviço de internet” e “Parceiro”
df.iloc[ lambda x: (x.index x 3 == 0) & (x.index <= 150]['Partner', 'InternetService' ]]
Parceiro | Serviço de internet | |
0 | sim | DSL |
3 | Não | DSL |
6 | Não | Fibra ótica |
9 | Não | DSL |
12 | sim | Fibra ótica |
15 | sim | Fibra ótica |
Também podemos selecionar rótulos ou posições presentes no meio.
- Selecione as posições das colunas entre 4 e 6 e as posições das linhas entre 20 e 25
df.iloc[20:25, 4:6]
Dependentes | posse | |
20 | Não | 1 |
21 | Não | 12 |
22 | Não | 1 |
23 | Não | 58 |
24 | Não | 49 |
Agora, se você tentar passar rótulos para o iloc, o Pandas mostrará a seguinte mensagem de erro:
ValueError: a indexação baseada em localização só pode ter tipos [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array]
Você receberá um erro semelhante se passar as posições para loc.
Leia também: Perguntas da entrevista do Pandas
Saiba mais sobre Python
Um aluno deve fazer perguntas e encontrar suas respostas. Esperamos que este artigo tenha respondido às suas perguntas sobre loc em Pandas (ou iloc em Python). Seria melhor se você experimentasse essas funções em diferentes conjuntos de dados para entender como elas funcionam.
Se você quiser saber mais sobre Python, Pandas e tópicos relevantes, visite nosso blog. Nossos especialistas adicionam vários recursos detalhados lá.
Se você está curioso para aprender sobre ciência de dados, confira o Programa PG Executivo em Ciência de Dados do IIIT-B & upGrad, que é criado para profissionais que trabalham e oferece mais de 10 estudos de caso e projetos, workshops práticos práticos, orientação com especialistas do setor, 1 -on-1 com mentores do setor, mais de 400 horas de aprendizado e assistência de trabalho com as principais empresas.
Como podemos adicionar linhas de Pandas DataFrame?
Para inserir linhas no DataFrame, podemos usar os comandos loc, iloc e ix.
1. O loc é usado principalmente para os rótulos do nosso índice. Pode ser entendido como quando inserimos no loc 4, o que indica que estamos procurando por entradas DataFrame com um índice de 4.
2. O iloc é usado principalmente para encontrar locais no índice. É como se inserissemos no iloc 4, o que indica que estamos procurando por entradas DataFrame presentes no índice 4.
3. O caso ix é complicado porque passamos um rótulo para ix se o índice for baseado em números inteiros. O ix 4 indica que estamos pesquisando o DataFrame por valores com um índice de 4.
O que é reindexação no contexto do Pandas em Python?
Os rótulos de linha e coluna de um DataFrame são alterados quando o reindexamos. O termo 'reindexar' refere-se ao processo de alinhamento de dados a um conjunto específico de rótulos ao longo de um único eixo. No Pandas, a reindexação pode ser usada para alterar o índice das linhas e colunas de um DataFrame. Muitas estruturas de dados de índice conectadas a muitas séries de pandas ou DataFrame de pandas podem ser utilizadas com índices.
Quais são algumas operações de dados no Pandas?
Existem várias operações de dados importantes para DataFrame no Pandas, que são as seguintes:
1. Seleção de linhas e colunas - Ao passar os nomes das linhas e colunas, podemos selecionar qualquer linha e coluna no DataFrame. Ele se torna unidimensional e é considerado uma série quando você o seleciona no DataFrame.
2. Filtragem de Dados - Usando algumas das expressões booleanas do DataFrame, podemos filtrar os dados.
3. Valores Nulos - Quando nenhum dado é fornecido aos itens, eles recebem um valor Nulo. Não pode haver valores nas diferentes colunas, que geralmente são representadas como NaN.