1
resposta

[Dúvida] Não deleta

Tentei utilizar o código, mas ele persiste em printar os zeros.

url = 'https://raw.githubusercontent.com/alura-cursos/pandas-conhecendo-a-biblioteca/main/base-de-dados/aluguel.csv'
df = pd.read_csv(url, sep=';')

nulos = df.query('Valor == 0 or Condominio == 0').index
print(nulos)

df = df.drop(nulos, axis=0)

# ou

# df.drop(nulos, axis=0, inplace=True)
print(df)
1 resposta

Oi Gabriel, tudo bem?

Testei o código que você compartilhou e tive algumas percepções. O seu dataframe está considerando as linhas sem valor no condomínio ou aluguel como NaN (que significa Not a Number - não é um número).

Isso pode ter acontecido por alguma diferença no tratamento de dados feito anteriormente ou até alguma diferença de versão de biblioteca.

Então, o filtro df.query('Valor == 0 or Condominio == 0') não está retornando nenhuma linha, pois não encontra os valores zero.

Nesse caso, é necessário utilizar outra estratégia. O pandas possui o método isna, que identifica os valores nulos. Conheça melhor na documentação. Para criar o dataframe apenas com os valores nulos nas colunas especificadas, Valor e Condomínio, faça assim:

df[df[['Valor', 'Condominio']].isna().any(axis=1)]

Filtramos a colunas do dataframe, adicionamos o método isna e então o método any para designar que não precisam ser todos os valores nulos. Pode ser ou em Valor, ou em Condomínio.

Então, obtemos a lista de índices desse dataframe com o método index e atribuímos à variável nulos:

nulos = df[df[['Valor', 'Condominio']].isna().any(axis=1)].index
nulos

Prontinho. Agora, basta seguir com a exclusão das linhas especificadas, utilizando o drop:

df = df.drop(nulos, axis=0)

Espero ter ajudado, Gabriel. Se ficou alguma dúvida, é só falar.

Abraço.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!