我这样做,直到创建一个测试错误(注释掉的行):
import pdblp
# create a connection to bbg
con = pdblp.BCon()
con.start()
ticker = ['gbpeur curncy', 'usdeur curncy']
# ticker = ['gbpeur curncy', 'usdeur curncy', 'somejunk curncy'] <-- create a test error
field = ['Ticker', 'px_last']
df = con.ref(ticker, field)
print(df)
返回这个数据帧:
ticker field value
0 gbpeur curncy Ticker GBPEUR
1 gbpeur curncy px_last 1.1698
2 usdeur curncy Ticker USDEUR
3 usdeur curncy px_last 0.9507
现在做完全相同的,但添加一个错误(不存在)股票行情自动收录器)。
返回值是:
ValueError: Unknow security 'somejunk curncy'
是否有一个标志或覆盖来简单地覆盖坏数据以获得结果。
预期的结果:
ticker field value
0 gbpeur curncy Ticker GBPEUR
1 gbpeur curncy px_last 1.1698
2 usdeur curncy Ticker USDEUR
3 usdeur curncy px_last 0.9507
4 somejunk curncy Ticker None <-- error like this
5 somejunk curncy px_last None <-- error like this
这是一种解决方案,它通过逐个检查并消除坏数据返回更短的数据帧。我希望有一个重写的方法会比这种方法更好。
#%%
import pdblp
# create a connection to bbg
con = pdblp.BCon()
con.start()
ticker = ['gbpeur curncy', 'usdeur curncy', 'somejunk curncy']
field = ['Ticker', 'px_last']
# test each one for errors
good_tickers = []
for t in ticker:
try:
df = con.ref(t, field)
good_tickers.append(t)
except ValueError:
print(f'error found with: {t}')
good_tickers
df = con.ref(good_tickers, field)
print(df)
这是结果:
error found with: somejunk curncy
ticker field value
0 gbpeur curncy Ticker GBPEUR
1 gbpeur curncy px_last 1.1696
2 usdeur curncy Ticker USDEUR
3 usdeur curncy px_last 0.9508