Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Estou tentando extrair os indicadores Mas da Erro

Codigo:

import fundamentus
import pandas as pd

# Definindo a carteira de ações
carteira_civil = ['DIRR3.SA', 'TEND3.SA', 'LAVV3.SA', 'CYRE3.SA',
                  'CURY3.SA', 'MRVE3.SA', 'MDNE3.SA', 'PLPL3.SA', 'EZTC3.SA']

# Criando um df com algumas infos da carteira
civil = fundamentus.get_papel(carteira_civil)[['Setor', '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']]
civil.head(3)
Erro:
    ValueError                                Traceback (most recent call last)
<ipython-input-71-873db5be557c> in <cell line: 9>()
      7 
      8 # Criando um df com algumas infos da carteira
----> 9 civil = fundamentus.get_papel(carteira_civil)[['Setor', 'Cotacao', 'Min_52_sem', 'Max_52_sem', 'Valor_de_mercado',
     10                                             'Nro_Acoes', 'Patrim_Liq','Receita_Liquida_12m','Receita_Liquida_3m',
     11                                             'Lucro_Liquido_12m', 'Lucro_Liquido_3m']]

9 frames
/usr/local/lib/python3.10/dist-packages/pandas/io/html.py in _parse_tables(self, doc, match, attrs)
    567 
    568         if not tables:
--> 569             raise ValueError("No tables found")
    570 
    571         result = []

ValueError: No tables found
1 resposta
solução!

Olá Tulio. Tudo bem com você?

O erro No tables found ocorre porque, na biblioteca fundamentus, o nome da carteira não inclui o sufixo .SA; é apenas o código do fundo, como, por exemplo, DIRR3. Você pode verificar isso neste link. Já na biblioteca yfinance, os códigos dos fundos utilizam o sufixo .SA, como mostrado neste exemplo. Em resumo, o erro ocorre devido à diferença de nomenclatura dos códigos de fundos entre as bibliotecas.

Além disso, outro erro que pode ocorrer é o 'DataFrame' object has no attribute 'append'. Esse problema está relacionado as mudanças nas versões mais recentes das bibliotecas, que descontinuaram o uso de .append(). Para corrigir, é necessário substituir esse comando por pd.concat ao juntar os dados de diferentes fundos.

Deixo o código abaixo com as modificações:

import fundamentus
import pandas as pd

carteira_civil = ['DIRR3', 'TEND3', 'LAVV3', 'CYRE3',
                  'CURY3', 'MRVE3', 'MDNE3', 'PLPL3', 'EZTC3']

civil = pd.concat([fundamentus.get_papel(papel)[['Setor', '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']] 
                                   for papel in carteira_civil])

civil.head(3)

Resultado:

Tabela com os resultados dos fundos 'DIRR3', 'TEND3', 'LAVV3', 'CYRE3',
                  'CURY3', 'MRVE3', 'MDNE3', 'PLPL3', 'EZTC3'

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado