Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

como preencher apenas determinados dados faltantes em um dataframe?

A dúvida é: como substituir no dataframe valores de uma feature tendo que checar a condição de uma outra feature?

Se, por exemplo, meu objetivo for preencher com "0" apenas os dados NaN da feature "Valor" das linhas que possuem IPTU < 100, como isso seria implementado usando os recursos do Pandas e/ou Numpy?

imoveis = pd.DataFrame([['Apartamento', None, 970, 68], 
                        ['Apartamento', 2000, 878, 112], 
                        ['Casa', 5000, None, 500], 
                        ['Apartamento', None, 1010, 170], 
                        ['Apartamento', 1500, 850, None], 
                        ['Casa', None, None, None], 
                        ['Apartamento', 2000, 878, None], 
                        ['Apartamento', 1550, None, 228], 
                        ['Apartamento', 2500, 880, 195]], 
                        columns = ['Tipo', 'Valor', 'Condominio', 'IPTU'])
1 resposta
solução!

Olá Luan,

Uma possibilidade é fazer uma função e aplicar a todas as linhas.

Exemplo:

# imports
import pandas as pd
import numpy as np

# Criação do DataFrame
imoveis = pd.DataFrame([['Apartamento', None, 970, 68], 
                        ['Apartamento', 2000, 878, 112], 
                        ['Casa', 5000, None, 500], 
                        ['Apartamento', None, 1010, 170], 
                        ['Apartamento', 1500, 850, None], 
                        ['Casa', None, None, None], 
                        ['Apartamento', 2000, 878, None], 
                        ['Apartamento', 1550, None, 228], 
                        ['Apartamento', 2500, 880, 195]], 
                        columns = ['Tipo', 'Valor', 'Condominio', 'IPTU'])

# Substituição dos valores

# Criação do substitui para verificar e retornar o valor correto
def substitui(linha):
    if (np.isnan(linha["Valor"])) & (linha["IPTU"] < 100):
        return 0
    else:
        return linha["Valor"]

# Aplicação do substitui criado
imoveis["Valor"] = imoveis.apply(substitui, axis=1)