Photo by Ayesh Rathnayake on Unsplash |
Os valores ausentes num dataframe pandas são representados com um objeto da biblioteca NumPy NaN (np.nan
). Esse objeto é bastante curioso. Por exemplo, o objeto não é igual a ele mesmo. Para comparação o objeto None
é igual a ele mesmo, mas não um objeto np.nan. No exemplo abaixo vamos fazer um pequeno teste e comparar os dois objetos com eles mesmos. O objeto np.nan
vai retornar False e o None
vai retornar True
.
>>> import pandas as pd >>> import numpy as np >>> np.nan == np.nan False >>> None == None True
Todos os operadores de comparação vão retornar False com exceção de um: o de diferente.
>>> np.nan > np.nan False >>> np.nan < np.nan False >>> np.nan != np.nan True
Com esses exemplos percebemos que o objeto np.nan
é um objeto singular. Essa propriedade é muito utilizada na biblioteca pandas.
Para verificar se dataframes e séries pandas são iguais é utilizado o operador ==
. Esse operador realiza a operação em cada elemento do dataframe ou série. Como resultado dessa operação temos um objeto com as mesmas dimensões dos objetos pais. Nesse tutorial vamos utilizar o operador de igual (==
). Muita gente acha que o operador igual e o método equals()
fazem a mesma coisa, mas o operador faz coisa diferentes do método equals()
.
Como comparar valores ausentes do dataframe pandas
Vamos começar com um exemplo para termos uma ideia de como o operador igual funciona. Vamos comparar cada elemento do dataframe com um valor.
>>> import pandas as pd >>> filmes = pd.read_csv(‘filmes.csv’) >>> cod_obra = filmes.select_dtypes(include='number') >>> cod_obra == 7603 indice codigo_obra ano_producao 0 False False False 1 False True False 2 False False False 3 False False False 4 False False False ... ... ... ... 9257 False False False 9258 False False False 9259 False False False 9260 False False False 9261 False False False [9262 rows x 3 columns]
Nesse exemplo, apenas um elemento tem o valor igual a 7603. Por isso apenas uma operação retornou True
. É assim que o operador igual funciona, realiza uma operação para cada elemento do dataframe.
Nota: para os próximos exemplos vamos precisar de um dataframe que tenha valores ausentes. Por isso abra o dataset filmes.csv, num editor de texto, e apague os primeiros valores da coluna codigo_obra
(é só apagar o valor entre as vírgulas).
Para o próximo exemplo vamos comparar o dataframe com ele mesmo. O esperado é que todos os resultados sejam True
, mas não é bem isso que acontece.
>>> filmes == filmes indice codigo_obra ... cnpj_requerente data_exibicao 0 True True ... True True 1 True False ... True True 2 True True ... True True 3 True False ... True True 4 True True ... True True ... ... ... ... ... ... 9257 True True ... True True 9258 True True ... True True 9259 True True ... True True 9260 True True ... True True 9261 True True ... True True [9262 rows x 9 columns]
Podemos ver que, contrariando as nossas expectativas, recebemos alguns valores False. Isso acontece por causa dos objetos np.nan
da biblioteca NumPy. Como vimos acima np.nan
é diferente de np.nan
. Como a biblioteca pandas faz uso desse objeto, para representar objetos vazios, qualquer dataframe que tenha um elemento vazio será diferente dele mesmo. E como saber se um dataframe é igual a outro? Com o método equals()
.
>>> filmes.equals(filmes) True
O método equals()
retorna True se os dataframes forem iguais.
Esse é o jeito certo de verificar se dois dataframes são iguais. Utilizando o operador igual, se tiver algum elemento vazio, eles não serão iguais. Com o método equals()
isso não acontece.
0 comentários:
Postar um comentário