Свести вложенный список диктов в Pandas Dataframe - PullRequest
0 голосов
/ 03 июля 2018

Я читаю ниже структуру 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, но не смог понять, применил ли это в этом контексте.

Спасибо заранее !!

1 Ответ

0 голосов
/ 03 июля 2018

Учитывая словарь как 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"])

Используя в качестве входных данных данный ответ, выходные данные выглядят следующим образом: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...