Comparar Intervalos em Excel com NumPy

Tempo de leitura:

4-5 minutos

Neste artigo vou mostrar-te como podes utilizar NumPy em Python para comparar 2 intervalos, algo que habitualmente realizas com funções de Excel como CORRESP [MATCH] ou mesmo com a função PROCV [VLOOKUP].

Em Excel muitas vezes usamos estas funções nomeadamente a função CORRESP [MATCH] para verificar se um valor existe num intervalo, esta é uma das principais, se não a principal função ou objetivo da função.

A biblioteca NumPy de Python é indicada para trabalhar com Arrays (intervalos) e realizar operações que envolvem intervalos, e contem funções específicas que permitem realizar este tipo de operações com mais detalhe, e que vais poder verificar neste artigo, não só para comparar valores mas também para realizar outras operações como Somas ou mesmo obter valores exclusivos.

A boa notícia é que podes fazer tudo no Excel!

Começar com a função CORRESP [Match]


Vamos começar com uma analogia e usar a função CORRESP [MATCH] para verificar se um valor de um intervalo existe em outro intervalo.

Confirmar se valores do intervalo A existem no intervalo B:

=CORRESP(B3:B13;C3:C13;0)

Confirmar se valores do intervalo B existem no intervalo A:

=CORRESP(C3:C13;B3:B13;0)

Para fazer esta verificação devemos naturalmente inverter os intervalos para analisar sobre o ponto de vista do valor que estamos a localizar. A função CORRESP, naturalmente devolve um número que representa a posição do valor, ou erro, no caso de o valor não existir.

An Excel spreadsheet displaying data in columns A and B, including formulas in cell E3. Column A is shaded light green containing numbers, while column B is shaded light red with values, some of which are highlighted in corresponding calculations with error messages like '#N/D'.

Adicionalmente se pretendermos um resultado diferente devemos usar outras funções como a função SE [IF] para mostrar os dados sem o erro ou sem o número da posição do valor.

Conhecer o NumPy e algumas funcionalidades

Se usares NumPy de Python vais conseguir realizar este tipo de operação com algumas vantagens.

Vamos começar por perceber a lógica:

  • Existem 2 intervalos, e estes intervalos podem ser guardados em 2 variáveis, de forma semelhante a dar um nome a um intervalo de células.

Para todas as expressões em Pyhton inicias a célula com =PY + Tecla TAB.

Para compilar o código deves usar CTRL + ENTER

E se pretenderes visualizar os dados em Excel podes usar os atalhos CTRL + ALT + SHIFT + M

Screenshot of an Excel spreadsheet displaying columns labeled A and B with numerical data, alongside a Python code snippet for creating NumPy arrays from the data, and a note indicating to use 'CTRL + ENTER' to consolidate the code.

O resultado visível é apenas um objeto de Python ndarray, o qual vai ser aqui usado apenas como o “contentor” das 2 variáveis (a e b) que representam respetivamente cada um dos intervalos.

Operação 1: Valores Exclusivos

Vamos começar com uma primeira operação, que substitui a função EXCLUSIVOS [UNIQUE] do Excel… mais tarde voltamos ao exemplo do CORRESP [MATCH].

Podemos obter os valores exclusivos do intervalo “a” que representa o intervalo A (no Excel):

np.unique(a)

Screenshot of an Excel spreadsheet displaying an array operation with the formula 'np.unique(a)', highlighting unique values in column A.

Ou o resultado de valores exclusivos do intervalo b.

np.unique(b)

An Excel spreadsheet displaying a dataset with columns A and B, showing numerical values. The formula 'np.unique(b)' is visible, indicating a process to find unique values in column B. There is an arrow pointing to a section labeled 'Exclusivos B' in column C, which is intended to display the unique numbers extracted from column B.

Operação 2: União dos 2 intervalos

No próximo exemplo vamos utilizar uma função que devolve um Array correspondente à união dos 2 intervalos, contendo apenas valores exclusivos de cada um deles.

A função é np.union1d onde apenas devemos indicar os argumentos correspondentes a cada um dos intervalos.

np.union1d(a,b)

A screenshot of an Excel spreadsheet displaying two columns labeled 'A' and 'B', with data values below them. A formula using 'np.union1d(a,b)' is visible, indicating a Python operation to combine the two arrays. There is an empty section labeled 'A com B' for the result.

Operação 3: Que elementos são comuns a ambos os Arrays?

Neste exemplo vamos determinar que elementos são comuns em ambos os Arrays. A função utilizada é np.intersect1d com a indicação dos intervalos.

np.intersect1d(a,b)

O resultado mostra o resultado apenas com os elementos (itens) comuns em ambos os Arrays. Por outras palavras uma lista exclusiva dos valores que estão presentes em ambos os intervalos.

An Excel spreadsheet displaying two columns labeled 'A' and 'B' with numerical values, and a cell marked 'Interseção' indicating an intersection operation, referencing a Python command 'np.intersect1d(a,b)'.

Operação 4: Quais os elementos do Array “a” que não existem em “b”

Neste exemplo vamos obter agora uma lista dos elementos do intervalo A que não existem no intervalo B. Voltamos à analogia com a função CORRESP [MATCH], onde estamos a comparar os valores que mostram o erro #N/D [#N/A].

A função é np.setdiff1d com a respetiva indicação dos intervalos. Podes inverter a ordem dos intervalos.

np.setdiff1d(a,b)

Nos exemplos

  • Do ponto de vista do intervalo A vamos obter um intervalo com os valores 6 e 0.
  • Do ponto de vista do intervalo B vamos obter um intervalo com os valores 5 e 8.
An Excel spreadsheet showing arrays A and B with values, and formulas using np.setdiff1d to find elements in A not in B and elements in B not in A.

Operação 5: Quais os elementos que não existem em ambos os conjuntos

Nesta operação vamos obter um intervalo com os valores que não existem em ambos os conjuntos em simultâneo. Mas existem no intervalo A ou no intervalo B.

A função utilizada é np.setxor1d com a respetiva indicação dos intervalos.

np.setxor1d(a,b)

Em resumo é a junção de ambos os intervalos do exemplo anterior.

Excel spreadsheet displaying a numpy function 'np.setxor1d(a,b)' in cell G5, with two columns labeled A and B, and a third column showing results for 'Não A e B' with numeric values.

Operação 6: Verificar se cada elemento de A existe em B (com resultados Booleanos).

Esta operação é a parte em que vamos voltar ao primeiro exemplo da função CORRESP [MATCH] em que verificamos se um valor do intervalo A existe em B. Se bem ter recordas do início do artigo, a função CORRESP devolve um número ou um erro.

  • Resultado Numérico: O valor existe e indica a posição
  • Resultado Erro (#N/D): O valor não existe.

E como referido se pretenderes outro tipo de resultado deves usar a função SE [IF] ou outras funções de verificação do Excel como É.NUM [ISNUMBER] ou É.ERRO [ISERROR] para poderes trabalhar com os valores Booleanos.

Em NumPy tens a tarefa facilitada com a função np.isin com a respetiva indicação dos intervalos. Nota: Se inverteres a ordem dos intervalos analisas sobre o ponto de vista diferente.

np.isin(a,b)

Screenshot of an Excel worksheet displaying a comparison between arrays using the CORRESP function and Python's NumPy library, highlighting true and false matches.

Próximo artigo:

Artigo Anterior:


Comentários

Leave a Reply

Discover more from Exceldriven

Subscribe now to keep reading and get access to the full archive.

Continue reading