1
resposta

Desafio: extraindo dados

A partir do pandas 2 o método concat ficou obsoleto caso você tente o código usando no desafio do primeira seção do curso Python e power bi irá receber um erro. Aqui está o código corrigido:

# Importando as bibliotecas
import fundamentus
import pandas as pd

# Definindo a carteira de ações
carteira_fund = ['ASAI3', 'EQTL3', 'LREN3', 'PRIO3', 
                 'RAIL3', 'RDOR3', 'SBSP3', 'VIVT3']

# Criando uma lista para armazenar os DataFrames
dfs = []

# Obtendo os dados para cada ticker e adicionando à lista
for ticker in carteira_fund:
    df = fundamentus.get_papel(ticker)
    dfs.append(df)

# Concatenando todos os DataFrames em um único DataFrame
ind = pd.concat(dfs)

# Selecionando as colunas desejadas
ind = ind[['Setor', 'Cotacao', 'Min_52_sem', 'Max_52_sem', 'Nro_Acoes',
           'Valor_de_mercado', 'Patrim_Liq', 'Receita_Liquida_12m', 'Receita_Liquida_3m',
           'Lucro_Liquido_12m', 'Lucro_Liquido_3m', 'Div_Liquida']]

# Passando o ticker para uma coluna
ind = ind.reset_index()
ind.rename(columns={'index': 'Ativo'}, inplace=True)

# Alterando colunas object para numeric
colunas = ['Cotacao', 'Min_52_sem', 'Max_52_sem', 'Valor_de_mercado', 'Nro_Acoes', 'Patrim_Liq',
           'Receita_Liquida_12m', 'Receita_Liquida_3m', 'Lucro_Liquido_12m', 'Lucro_Liquido_3m', 'Div_Liquida']
ind[colunas] = ind[colunas].apply(pd.to_numeric, errors='coerce', axis=1)

# Criando um novo df com alguns indicadores da carteira
ind_2 = fundamentus.get_resultado_raw().reset_index()
ind_2 = ind_2.query("papel in @carteira_fund")
ind_2 = ind_2[['papel', 'P/L', 'P/VP', 'Div.Yield']].reset_index(drop=True)
ind_2.rename(columns={'papel': 'Ativo', 'Div.Yield': 'DY'}, inplace=True)

# Concatenando os dfs em um só com as infos e indicadores
indicadores = pd.merge(ind, ind_2, on="Ativo")

# Criando uma coluna para LPA (Lucro por Ação) e VPA (Valor Patrimonial por ação)
# para calcular a fórmula de Graham: Valor intrínseco de uma ação (VI = √22,5 x LPA x VPA)
indicadores["LPA"] = (indicadores["Lucro_Liquido_12m"] / indicadores["Nro_Acoes"]).round(2)
indicadores["VPA"] = (indicadores["Patrim_Liq"] / indicadores["Nro_Acoes"]).round(2)

# Deletando variáveis temporárias
del ind, ind_2, carteira_fund, colunas

# Exibindo as primeiras linhas do DataFrame final
indicadores.head(3)
1 resposta

Boa, Thiago!

Seu código está funcionando perfeitamente, além de estar bem organizado. Obrigada por compartilhar com o fórum.

Continue se dedicando.

Abraços!