依次优化 2 个循环

Optmizing 2 loops in sequence

提问人:Marcelo Carvalho 提问时间:1/11/2023 更新时间:1/11/2023 访问量:16

问:

我正在尝试在 API 中收集投资基金的数据,有一个基金代码列表和一个我想要的格式的天数列表。

我在 For by day 和 For by fund 之后创建了一个例程。但是要完成所有数据帧,这需要我 30 分钟。

我想知道如何优化它

下面是代码的一部分:

dataPosicao_list 是天数列表,fundo_id_list是 API 识别的按 ID 划分的资金列表

df_geral = pd.DataFrame()
df_day = pd.DataFrame()

for day in dataPosicao_list:
        #df_day = pd.DataFrame()
        for fundo_id in fundo_id_list:
                try:
                        url_api = f'https://modal-pp.totvs.amplis.com.br/amplisapi/ws/v2/rendavariavel/avista/movimentos/carteira/{fundo_id}/data/{day}?pagina=0&tamanhoPagina=100'
                        
                        session_api = requests.Session()
                        response = session_api.get(url_api, verify=False)
                        payload_api = ''
                        headers_api = {'Content-Type': 'application/json',
                        'charset': 'UTF-8',
                        'Authorization': token }
                        posicoes_api = session_api.request('GET', url_api, headers = headers_api, data = payload_api)
                        posicoes = json.loads(posicoes_api.text)
                        df_total = pd.DataFrame()
                        for linha in posicoes['conteudo']:
                                try:
                                        bolsa = linha['bolsa']['codigo']
                                except:
                                        bolsa = "None"
                                try:
                                        ativo = linha['ativo']['codigo']
                                except:
                                        ativo = "None"
                                try:
                                        bolsa_internacional = linha['bolsa']['bolsaInternacional']
                                except:
                                        bolsa_internacional = "None"
                                try:
                                        localidade = linha['bolsa']['localidade']['codigo']
                                except:
                                        localidade = "None"
                                try:
                                        moeda = linha['bolsa']['moeda']['internationalCode']
                                except: 
                                        moeda = "None"
                                try:
                                        fundo = linha['carteira']['administrador']['codigoB3']
                                except: 
                                        fundo = "None"
                                try:
                                        Fundo_ou_Clube = linha['carteira']['administrador']['administradorClubeInvestimento']
                                except:
                                        Fundo_ou_Clube = "None"
                                try:
                                        carteira = linha['carteira']['administrador']['codigo']
                                except:
                                        carteira = "None"
                                try:
                                        class_fundo = linha['carteira']['classificacaoFundo']['classificacao']
                                except:
                                        class_fundo = "None"
                                try:
                                        cota_fidic = linha['carteira']['classificacaoFundo']['tipoCotaFIDC']
                                except:
                                        cota_fidic = "None"
                                try:
                                        mov_cetip = linha['carteira']['codAtivoMnemonicoCetip']
                                except:
                                        mov_cetip = "None"
                                try:
                                        controlador = linha['carteira']['controlador']['codigo']
                                except:
                                        controlador = linha['carteira']['controlador']
                                try:
                                        custodiante = linha['carteira']['custodiante']['nome']
                                except:
                                        custodiante = "None"
                                try:
                                        data = linha['data']
                                except:
                                        data = "None"
                                try:
                                        nome_fundo = fundo_id
                                except: 
                                        nome_fundo = "None"
                                try:
                                        taxa_performance = linha['carteira']['taxaPerformance']
                                except:
                                        taxa_performance = "None"
                                try:
                                        mercado = linha['mercado']['descricao']
                                except:
                                        mercado = "None"
                                try:
                                        calculo_corretagem_emulamentos = linha['corretagem']['calculaCorretagemEmolumentos']
                                except:
                                        calculo_corretagem_emulamento = "None"
                                try:
                                        porcentagemDevolucaoCorretagemCorretora = linha['corretagem']['porcentagemDevolucaoCorretagemCorretora']
                                except:
                                        porcentagemDevolucaoCorretagemCorretora = "None"
                                try:
                                        modalidade = linha['modalidadeMovimento']['descricao']
                                except:
                                        modalidade = "None"
                                try:
                                        preco = linha['preco']
                                except:
                                        preco = "None"
                                try:
                                        quantidade = linha['quantidade']
                                except:
                                        quantidade = "None"
                                try:
                                        valor_bruto = linha['valorBruto']
                                except:
                                        valor_bruto = "None"
                                try:
                                        id = linha['id']
                                except:
                                        id = 'None'
                                serie = {'id' : id, 'controlador': controlador,'taxa_performance': taxa_performance, 'nome_fundo': nome_fundo, 'modalidade':modalidade, 'mercado': mercado, 'preco': preco, 'quantidade':quantidade, 'valor_bruto': valor_bruto, 'cota_fidic': cota_fidic,'porcentagemDevolucaoCorretagemCorretora': porcentagemDevolucaoCorretagemCorretora, 'calculo_corretagem_emulamentos': calculo_corretagem_emulamentos, 'data': data,  'custodiante':custodiante, 'controlador': controlador, 'mov_cetip': mov_cetip, 'bolsa': bolsa, 'ativo' : ativo, 'bolsa_internacional': bolsa_internacional, 'localidade': localidade , 'moeda': moeda, 'fundo': fundo, 'Fundo_ou_Clube': Fundo_ou_Clube, 'carteira': carteira, ' class_fundo':  class_fundo }
                                serie = pd.Series(serie)
                                df_total = df_total.append(serie, ignore_index=True)
                                #df_geral = df_geral.append(df_total, ignore_index=True)
                                df_day = df_day.append(df_total, ignore_index=True)
                except:
                        continue
        df_geral = df_geral.append(df_day, ignore_index=True)


df_geral = df_geral.drop_duplicates(subset=['id'])
df_geral.head()


print(df_geral)
list loops for-loop 优化 序列

评论


答: 暂无答案