Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Ainda recebo SettingWithCopyWarning:

Estou recebendo esse aviso mesmo usando o loc, abaixo está duas situações em que tenho recebido este aviso:

bd_faturamento_2017.loc[:,'Valor Total'] = bd_faturamento_2017['Qtde Item']*bd_faturamento_2017['Valor Unitário Líquido Item']

e

bd_faturamento_2016.loc[:,'Ano'] = pd.DatetimeIndex(bd_faturamento_2016['Data do Lançamento'], dayfirst=True).year

O que está acontecendo? Por que ainda recebo o aviso SettingWithCopyWarning?

Agradeço desde já.

2 respostas
solução!

Olá, Emmanuel! Tudo bom? Espero que sim.

Esse erro acontece geralmente quando estamos trabalhando operações em cima de uma cópia superficial de um DataFrame, que na verdade se chamada view, e em uma tradução direta, seria apenas uma visualização do DataFrame.

Pelo que observei do segundo erro, existe um bd_faturamento para diferentes anos (2016 e 2017), então pode ter acontecido do seu DataFrame chamado bd_faturamento_2017, ser uma cópia/view de um DataFrame maior chamado apenas bd_faturamento, onde foi aplicado um filtro de Datas, e se isso for verdade e aconteceu algo do tipo:

bd_faturamento_2017 = bd_faturamento[bd_faturamento['Ano'] == 2017]

Isso pode sim gerar o mesmo erro SettingWithCopyWarning. E para corrigir, seria necessário criar uma cópia profunda desse DataFrame para aí sim podermos criar novas variáveis, e vamos fazê-lo com a função .copy(), resultando em:

bd_faturamento_2017 = bd_faturamento[bd_faturamento['Ano'] == 2017].copy()

Esse erro também é comum de acontecer em processos onde a cadeia de ações não é bem específica, como por exemplo no uso do loc para criar novas variáveis. E você pode conferir mais dessa discussão na própria documentação do Pandas:

-Why does assignment fail when using chained indexing?

É mais aconselhável que você utilize algo da seguinte maneira para criar novas colunas (claro, garantindo que já está trabalhando com uma cópia direta do DataFrame):

bd_faturamento_2017['Valor Total'] =  
bd_faturamento_2017[''Qtde Item'']... # operações com outras colunas aqui

Se ainda tiver alguma dúvida, estou por aqui. Ótimos estudos e grande abraço!

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

Deu certo, era isso mesmo. Mto obrigado.