Мне удалось «обмануть» и заставить работать строку (с ошибками консоли) через скрипт Regex и pandas дамп строки.
Я нашел лучшее решение, используя pandas собственную функцию "to_ json" следующим образом. Однако это не подтягивание значений ВВП к карте - это говорит о том, что значения не определены - я предполагаю, что мне нужно настроить небольшой параметр:
def MapData():
global conn
import wbdata
ind_id=1
qry = "SELECT * FROM indicator WHERE id = '" + str(ind_id) + "' ;"
cur = conn.cursor()
df = pd.read_sql(qry, conn)
cur.close()
ind_label = "GDP"
ind_code = "NY.GDP.MKTP.CD"
indicators = { ind_code : ind_label }
data = wbdata.get_dataframe(indicators, country=u'all', convert_date=False, keep_levels=True).dropna()
# Get most recent data only
data2 = data.reset_index().drop_duplicates(subset='country', keep='first').set_index('country')
# Merge data with country data from database - this removes
rslt = pd.merge(data2, df, left_on='country', right_on="name", right_index=False, how='inner', sort=False);
rslt.reset_index()
rsl2 = rslt[['iso2c',ind_label]]
rsl3 = rsl2.dropna()
rssl = rsl3.round({ind_label:2})
return (pd.DataFrame(rssl).to_json(orient='values')) # see other options for to_json - orient - like columns, records, split, etc.
Это отображает карту, но значения gdpData[code]
отображаются как неопределенные
Примечание RE: Wbdata.get_dataframe ... Внимание - МЕДЛЕННО! Почему? Потому что это получает данные за 60 лет (1500 строк) !! Команда Most-Recent-Only для каждой страны нуждается в команде pandas '.drop_duplicates(subset='country', keep='first')
. Это можно значительно ускорить, используя локально кэшированный файл или сводку базы данных, или другой отличный вариант - запросить Javascript для получения JSON данные непосредственно из внешнего интерфейса - см. Использование JQuery и оперативные JSON данные для заполнения JVectorMaps
У кого-нибудь есть решение для этого?