1
resposta

Gerando colunas no Pandas - Dúvida específicada nos detalhes :)

Oi gente, boa tarde.

Eu estou com uma dificuldade sobre a reutilização de uma função.

Estou tentando pegar os atributos dos pokemons (hp, defense attack, special-attack, etc).

Consegui construir uma função que faz isso, mas eu gostaria de reutilizá-la de alguma forma (se necessário, usar outra maneira).

Eu gostaria de não ter que reescrever o código e alterar detalhes toda vez que eu quiser puxar um atributo. Alguém pode me ajudar?

Segue abaixo, as imagens para vocês terem uma visão melhor do que eu tentei dizer.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

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

Você pode utilizar a sua função get_atribute_hp sobre outras colunas desde que construa parâmetros para as variáveis que deseja manipular. Vamos alterar algumas coisas para facilitar a leitura:

def get_atribute(data_source: pd.DataFrame, atribute_choosed: str):
    for atribute in data_source:
            if atribute['stat']['name'] == atribute_choosed:
                return atribute['base_stat']

No código acima, eu criei mais um parâmetro com a característica que você está analisando, nesse caso poderia ser algo como atribute_choosed = "hp", e também indiquei os tipos deles utilizando a técnica de Type Hint, mas não afeta o código.

Dessa maneira, você consegue criar outra função auxiliar, tal como:

def apply_to_dataframe_my_function(dataframe, atribute):
    return dataframe.stat.apply(get_atribute(dataframe, atribute))

Que pede um atributo do tipo string, e aplica a função get_atribute com aquele atributo escolhido ao seu dataframe indicado.

Uma outra possibilidade é criar apenas uma função e aplicar sobre o DataFrame inteiro, o pandas também dá essa possibilidade. Mas para este caso, seria interessante um outro dataframe cópia, que representassem os dados modificados

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!