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

[Dúvida] SettingWithCopyWarning

Boa tarde! em algumas células estou tendo essa mensagem de retorno quando executo, funciona mas da essa mensagem de alerta:

dados_sem_vazio['cliente.tempo_servico'].fillna(
    np.ceil(
        dados_sem_vazio['conta.cobranca.Total'] / dados_sem_vazio['conta.cobranca.mensal']
    ), inplace=True
)

Saída:

<ipython-input-48-bc77849bb437>:1: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  dados_sem_vazio['cliente.tempo_servico'].fillna(

Também no vídeo anterior ocorreu isso:

dados_sem_vazio.drop_duplicates(inplace=True)

Saída:

<ipython-input-35-73602724d143>:1: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  dados_sem_vazio.drop_duplicates(inplace=True)

Tem algo a ser feito ou é somente um aviso mesmo? Fiz algo errado?

Obrigado.

2 respostas
solução!

Oi, Ali! Tudo certo contigo?

Essa mensagem é um aviso de que o Pandas não tem certeza se o DataFrame dados_sem_vazio é uma cópia de outro DataFrame ou é um DataFrame independente.

Caso dados_sem_vazio não seja uma cópia do DataFrame que criamos antes dele (dados_normalizados), quaisquer ações de remoção de informações, por exemplo, será refletida em ambos conjuntos de dados. Nesse sentido, Ali, sugiro executar o seguinte código em seu Notebook:

dados_sem_vazio = dados_normalizados[dados_normalizados['Churn'] != ''].copy()

O código acima foi elaborado ao longo das aulas para filtrar as informações de dados_normalizados, retirando os conteúdos vazios. No final, usamos o método copy() para criar uma cópia de dados_normalizados — isso garantirá que dados_sem_vazio seja um DataFrame independente e, consequentemente, que você execute os demais códigos sem a aparição de alertas!

Logo, depois de realizar esta ação, tente mais uma vez rodar os comandos abaixo:

dados_sem_vazio.drop_duplicates(inplace=True)
dados_sem_vazio['cliente.tempo_servico'].fillna(
    np.ceil(
        dados_sem_vazio['conta.cobranca.Total'] / dados_sem_vazio['conta.cobranca.mensal']
    ), inplace=True
)

Espero que dê tudo certo, Ali. Fico à disposição para te ajudar caso novas dúvidas apareçam.

Abraços!

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

Oi Andrieli, entendi! deu certo sim, obrigado.