mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-11-01 23:12:21 +00:00
60 lines
1.9 KiB
Python
60 lines
1.9 KiB
Python
import logging
|
|
import re
|
|
|
|
import pandas as pd
|
|
|
|
from openbb_terminal.decorators import log_start_end
|
|
from openbb_terminal.helper_funcs import get_user_agent, request
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def format_number(text: str) -> float:
|
|
numbers = re.findall(r"[-+]?(?:\d*\.\d+|\d+)", text)
|
|
if "t" in text.lower():
|
|
multiplier = 1_000_000_000_000
|
|
elif "b" in text.lower():
|
|
multiplier = 1_000_000_000
|
|
elif "m" in text.lower():
|
|
multiplier = 1_000_000
|
|
else:
|
|
multiplier = 1
|
|
|
|
return round(float(numbers[0]) * multiplier, 2)
|
|
|
|
|
|
@log_start_end(log=logger)
|
|
def get_debt() -> pd.DataFrame:
|
|
"""Retrieves national debt information for various countries. [Source: wikipedia.org]
|
|
|
|
Returns
|
|
-------
|
|
pd.DataFrame
|
|
Country, Debt [$], Debt [% of GDP], Debt per capita [$], Debt per capita [% of GDP]
|
|
"""
|
|
url = "https://en.wikipedia.org/wiki/List_of_countries_by_external_debt"
|
|
response = request(url, headers={"User-Agent": get_user_agent()})
|
|
df = pd.read_html(response.content)[0]
|
|
df = df.rename(
|
|
columns={
|
|
"Country/Region": "Country",
|
|
"External debt US dollars": "USD Debt",
|
|
"Per capitaUS dollars": "Per Capita",
|
|
"Per capita US dollars": "USD Per Capita",
|
|
"Date": "As Of",
|
|
}
|
|
)
|
|
df["USD Debt"] = df["USD Debt"].apply(lambda x: format_number(x)).astype("int64")
|
|
df["USD Per Capita"] = df["USD Per Capita"].astype("int64")
|
|
df["Rank"] = df["USD Debt"].rank(ascending=False).astype("int64")
|
|
date = df["As Of"].astype(str)
|
|
dates = []
|
|
for i in date.index:
|
|
dates.append(date[i].split("[")[0])
|
|
df["As Of"] = dates
|
|
df["As Of"] = df["As Of"].str.replace("31 September", "30 September").str.strip()
|
|
indexes = ["Rank", "As Of", "Country", "USD Per Capita", "USD Debt", "% of GDP"]
|
|
df = df[indexes]
|
|
|
|
return df
|