Я читаю ниже структуру json
{"response":
{"GDUEACWF":
{"2018-06-01":
[{"groupwide_market":"Developed Markets",
"weights":0.8794132316432903},
{"groupwide_market":"Developed Markets",
"weights":0.8794132316432903}],
"2018-06-02":
[{"groupwide_market":"Developed Markets",
"weights":0.8794132316432903},
{"groupwide_market":"Developed Markets",
"weights":0.8794132316432903}]}}}
и пытается сгладить его в рамку данных Pandas в нижнем формате.
|data_date |groupwide_market |weights
|2018-06-01 |Developed Markets |0.08794132316432903
Я попытался сделать это, перейдя через каждый список в каждую пару k, v, используя приведенные ниже коды. Однако он работает, но он очень медленный. Для создания 100 тыс. Строк данных требуется более 30 минут.
df = pd.DataFrame()
#concatenating each line of the list within each dict cell
for k1,v1 in data['response'][mnemonic].items():
for ele in v1:
df_temp = pd.concat({k2: pd.Series(v2) for k2, v2 in ele.items()}).transpose()
df_temp['data_date'] = k1
df = df.append(df_temp,ignore_index=True)
df.columns = [x[0] for x in df.columns]
Могу ли я узнать, есть ли более эффективный способ сделать это? Пробовал читать документацию и примеры для json_normalize, но не мог понять, применяют ли они в этом контексте.
Заранее спасибо!!
Учитывая словарь как data
, мы можем действовать следующим образом:
import pandas as pd
pd.DataFrame([(date, *nodes.values()) for info in data["response"].values()
for date, values in info.items() for nodes in values],
columns=["date", "market", "weight"])
Используя в качестве входного сигнала данный ответ, выход выглядит следующим образом: