Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Erro ao baixar dados mais recentes #1

Open
bmazetto opened this issue Nov 2, 2024 · 1 comment
Open

Erro ao baixar dados mais recentes #1

bmazetto opened this issue Nov 2, 2024 · 1 comment

Comments

@bmazetto
Copy link

bmazetto commented Nov 2, 2024

Olá, estou usando a biblioteca para fazer minhas próprias análises de fundos. Ela ajuda bastante para consolidar os dados das cotas diárias (obrigado por disponibilizá-la!). No entanto, estou me deparando com o seguinte erro ao tentam baixar dados mais recentes:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
[<ipython-input-38-a3d8068c0cac>](https://localhost:8080/#) in <cell line: 4>()
      2 
      3 # Criar um novo DataFrame temporário com os novos dados
----> 4 novo_dado = comp.get_brfunds(anos=range(2024, 2025), # ANO DE INTERESSE
      5                                       meses=range(9,10), # MESES DO ANO DE INTERESSE
      6                                       patriminio_liquido_minimo=1e6)

7 frames
[/usr/local/lib/python3.10/dist-packages/comparar_fundos_br/get_brfunds.py](https://localhost:8080/#) in get_brfunds(anos, meses, classe, num_minimo_cotistas, patriminio_liquido_minimo, proxy)
    137         for mes in meses:
    138             if ano == datetime.now().year and mes <= datetime.now().month:
--> 139                 informe_diario_fundos_filtrado = _ler_dados_diarios(ano, mes, cadastro_fundos, proxy, num_minimo_cotistas, patriminio_liquido_minimo)
    140                 informe_diario_fundos_historico = pd.concat([informe_diario_fundos_historico, informe_diario_fundos_filtrado])
    141             elif ano < datetime.now().year:

[/usr/local/lib/python3.10/dist-packages/comparar_fundos_br/get_brfunds.py](https://localhost:8080/#) in _ler_dados_diarios(ano, mes, cadastro_fundos, proxy, num_minimo_cotistas, patriminio_liquido_minimo)
    112         fundos = fundos[fundos["VL_PATRIM_LIQ"] >= patriminio_liquido_minimo]
    113 
--> 114     informe_diario_fundos_filtrado = _mesclar_bases(cadastro_fundos, fundos)
    115     informe_diario_fundos_filtrado = informe_diario_fundos_filtrado.set_index(["DT_COMPTC"])
    116     informe_diario_fundos_filtrado.index = pd.to_datetime(informe_diario_fundos_filtrado.index)

[/usr/local/lib/python3.10/dist-packages/comparar_fundos_br/get_brfunds.py](https://localhost:8080/#) in _mesclar_bases(cadastro_fundos, informe_diario_fundos)
     77 def _mesclar_bases(cadastro_fundos: pd.DataFrame, informe_diario_fundos: pd.DataFrame) -> pd.DataFrame:
     78     cadastro_fundos_filtrado = cadastro_fundos[['CNPJ_FUNDO', 'CLASSE', 'DENOM_SOCIAL']]
---> 79     dados_completos_filtrados = informe_diario_fundos.merge(cadastro_fundos_filtrado, on=['CNPJ_FUNDO'], how="inner")
     80     dados_completos_filtrados["CNPJ - Nome"] = dados_completos_filtrados["CNPJ_FUNDO"] + " // " + dados_completos_filtrados["DENOM_SOCIAL"]
     81     dados_completos_filtrados = dados_completos_filtrados[["CNPJ - Nome", 'DT_COMPTC', 'CLASSE', 'VL_QUOTA', "NR_COTST", "VL_PATRIM_LIQ"]]

/usr/local/lib/python3.10/dist-packages/pandas/core/frame.py in merge(self, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)
  10091         from pandas.core.reshape.merge import merge
  10092 
> 10093         return merge(
  10094             self,
  10095             right,

[/usr/local/lib/python3.10/dist-packages/pandas/core/reshape/merge.py](https://localhost:8080/#) in merge(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)
    108     validate: str | None = None,
    109 ) -> DataFrame:
--> 110     op = _MergeOperation(
    111         left,
    112         right,

[/usr/local/lib/python3.10/dist-packages/pandas/core/reshape/merge.py](https://localhost:8080/#) in __init__(self, left, right, how, on, left_on, right_on, axis, left_index, right_index, sort, suffixes, indicator, validate)
    701             self.right_join_keys,
    702             self.join_names,
--> 703         ) = self._get_merge_keys()
    704 
    705         # validate the merge keys dtypes. We may need to coerce

[/usr/local/lib/python3.10/dist-packages/pandas/core/reshape/merge.py](https://localhost:8080/#) in _get_merge_keys(self)
   1177                         #  the latter of which will raise
   1178                         lk = cast(Hashable, lk)
-> 1179                         left_keys.append(left._get_label_or_level_values(lk))
   1180                         join_names.append(lk)
   1181                     else:

[/usr/local/lib/python3.10/dist-packages/pandas/core/generic.py](https://localhost:8080/#) in _get_label_or_level_values(self, key, axis)
   1848             )
   1849         else:
-> 1850             raise KeyError(key)
   1851 
   1852         # Check for duplicates

KeyError: 'CNPJ_FUNDO'

Eu verifiquei que o layout dos dados disponibilizados no site da CVM mudou recentemente e que a coluna "CNPJ_FUNDO" passou a se chamar "CNPJ_FUNDO_CLASSE". Acredito que esse seja o motivo para retornar esse erro.

@rafa-rod
Copy link
Owner

rafa-rod commented Nov 5, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants