Olá, Cassiano! Como vai?
Vou te mostrar como fazer isso na prática, preparado?!
Pra isso, vou simular um DataFrame com 50 registros que possuirá alguns valores NaN
inseridos de maneira aleatória.
import pandas as pd
import numpy as np
# Gerando 50 nomes com alguns NaNs
nomes = ['Ana', 'Bruno', 'Carlos', 'Daniela', 'Eduardo', 'Fernanda', 'Gustavo', 'Helena', 'Igor', 'Juliana']
nomes_50 = [np.random.choice(nomes) if np.random.rand() > 0.1 else None for _ in range(50)]
# Gerando 50 idades com alguns NaNs
idades_50 = [np.random.randint(18, 60) if np.random.rand() > 0.1 else None for _ in range(50)]
# Criando DataFrame
df = pd.DataFrame({
'nome': nomes_50,
'idade': idades_50
})
Logo em seguida, executamos o seguinte código:
df_nan = df[df.isna().any(axis=1)]
df_nan
- O método
.isna(
) retorna True
onde há valor NaN
, e False
onde há valor válido. - E o método
.any(axis=1)
retorna True
para a linha inteira se qualquer coluna tiver NaN
. - Logo usamos
df[df.isna().any(axis=1)]
como filtro booleano para selecionar apenas as linhas com pelo menos um NaN
.
Exemplo de resultado:
index | nome | idade |
---|
3 | Bruno | NaN |
7 | | 43.0 |
9 | Gustavo | NaN |
11 | | 51.0 |
12 | | NaN |
14 | Carlos | NaN |
21 | | 59.0 |
23 | | 33.0 |
31 | | 58.0 |
32 | | 53.0 |
35 | Fernanda | NaN |
37 | | NaN |
42 | | 35.0 |
49 | | 32.0 |
Logo é possível observar apenas as posições com pelo menos um elemento ausente.
Mas não acaba por aí, Cassiano! Podemos usar o atributo .index
para retornar somente os índices desse DataFrame df_nan
. Assim:
df_nan.index
Exemplo de resultado:
Index([3, 7, 9, 11, 12, 14, 21, 23, 31, 32, 35, 37, 42, 49], dtype='int64')
Espero ter ajudado e fico à disposição se precisar.
Abraço e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado