I am pulling data from Datastream for a project. I have a list of 40 countries for which I want their bond issuance information.
The query is as follows:
All1 = rd.discovery.search(
view = rd.discovery.Views.GOV_CORP_INSTRUMENTS,
top = 2000,
filter = "((DbType eq 'GOVT') and ((RCSCurrencyLeaf eq 'US Dollar') or (RCSCurrencyLeaf eq 'Euro')) and\
(\
(\
(DTSubjectName eq 'Angola')\
and MaturityDate gt 2000-01-01)))",
select = "DTSubjectName,RCSCountryLeaf,IssueDate,MaturityDate,RCSCurrencyLeaf,CouponRate,FaceIssuedUSD"
)
Final1 = All1.sort_values(by=['DTSubjectName', 'IssueDate'])
Final1
I would like to get the data for all 40 countries in my list at once, but I am not sure how to do so without brute force typing in every country as I did for Angola. While such a solution works in the short-term, it is very inflexible if I would like to add or take away countries from the query.
I am imagining that the best way to do this without just manually inputting every country would be to use a for loop with an f-string.
I tried putting all country names in manually, i.e., but this is inflexible.
All1 = rd.discovery.search(
view = rd.discovery.Views.GOV_CORP_INSTRUMENTS,
top = 2000,
filter = "((DbType eq 'GOVT') and ((RCSCurrencyLeaf eq 'US Dollar') or (RCSCurrencyLeaf eq 'Euro')) and\
(\
(\
(DTSubjectName eq 'Angola') or\
(DTSubjectName eq 'Benin') or\
(DTSubjectName eq 'Botswana')\
and MaturityDate gt 2000-01-01)))",
select = "DTSubjectName,RCSCountryLeaf,IssueDate,MaturityDate,RCSCurrencyLeaf,CouponRate,FaceIssuedUSD"
)
Final1 = All1.sort_values(by=['DTSubjectName', 'IssueDate'])
Final1
You could split your filter into a couple of strings. Then using a join for creating the required country filter lines and concatenate together:
This loops through the countries and creates the text string, then joins all of these together with the
" or "string. Then you just setfilter=filter_string.