我有大约 14,000 行数据框,并尝试通过调用 API 将一些数据填充到新列中。下面的代码检索预期的响应,但是,似乎每次迭代都等待响应进入下一行。
这是函数:
def market_sector_des(isin):
isin = '/isin/' + isin
return blp.bdp(tickers = isin, flds = ['market_sector_des']).iloc[0]
我在用xbbg调用 Bloomberg API。
.apply() 函数返回预期的响应,
df['new_column'] = df['ISIN'].apply(market_sector_des)
但每个响应大约需要 2 秒,如果有 14,000 行,则大约需要 8 小时。
有没有办法使这个应用函数异步,以便所有请求并行发送?我已经将 dask 视为替代方案,但是,我在使用它时也遇到了问题。
如果上述正是您想要做的,那么可以通过创建一个包含要发送的股票语法的列,然后将该列作为一系列通过 blpapi 传递来实现
df['ISIN_NEW'] = '/isin/' + df['ISIN']
isin_new = pd.unique(df['ISIN_NEW'].dropna())
mktsec_df = blp.bdp(tickers = isin_new, flds = ['market_sector_des'])
然后,您可以将新创建的 df 连接到现有 df,以便获得完整的列中的数字。
newdf = pd.merge(df, mktsec_df, how='left', left_on = 'ISIN_NEW', right_index = True )
这应该会导致一次调用,理想情况下会将速度降低到不到一分钟。如果可行请告诉我。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)