Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

[Resolução dos projetos]

Depois do método explode e o tratamento dos caracteres para transformação das coluna numéricas, os dados na célula viram uma lista.

df_p1 = df_p1.explode(list(df_p1.columns)[1:]).reset_index(drop=True)
df_p1['Valor da compra'] = df_p1['Valor da compra'].apply(lambda x: x.replace('R$', '').replace(',','.').split())

Na coluna 'Valor da compra', o resultado saí de R$ XX,YY para [XX.YY] em cada linha dessa coluna (um único elemento)

A minha solução foi usar novamente o método explode para eliminar essa dualidade, garantindo a não criação de linhas inexistentes já que é uma lista de um único elemento correspondendo à linha que a originou.

1 resposta
solução!

Oii Igor, tudo bem?

Obrigada por compartilhar sua solução aqui no fórum! É muito válido ver você identificando o comportamento do .split() sem argumentos, que retorna uma lista mesmo quando há um único elemento, e buscar uma saída para isso.

Usar o explode novamente funciona bem para esse caso de lista com elemento único. Vale notar uma alternativa que evita a criação da lista desde o início: ao invés de usar .split() no final da chain de replace, você pode converter diretamente para float depois dos replaces:

df_p1['Valor da compra'] = df_p1['Valor da compra'].apply(
    lambda x: float(x.replace('R$', '').replace(',', '.').strip())
)

Assim o valor já sai como número direto, sem precisar do segundo explode. Mas a sua abordagem também resolve o problema com consistência.

Conte com a Alura para evoluir seus estudos. Em caso de dúvidas, fico à disposição.

Bons estudos!

Sucesso

Imagem da comunidade