Создать DataFrame из списка вложенных объектов словаря - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть список вложенных объектов словаря в файле JSON.Я пытаюсь создать DataFrame этого файла.

Вот первые 2 объекта:

data= [ {
    "model": "class",
    "pk": 48,
    "fields": {
        "unique_key": "9f030ed1d5e56523",
        "name": "john",
        "follower_count": 2395,
        "profile_image": "  "
}  }  ,{ 
    "model": "class",
    "pk": 49,
    "fields": {
        "unique_key": "0e8256ad7f27270eb",
        "name": "dais",
        "follower_count": 264,
        "profile_image": "   "
} }, .....]

Если я попробую что-то вроде:

df = pd.DataFrame(data)

Эточто я получаю.

https://d.top4top.net/p_1132pfebn1.png

Я искал помощи и нашел это , но проблема в том, что в списке нетФункция клавиш ().

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Предполагая, что у вас есть только один уровень вложенных словарей, и вы знаете имя ключа:

for d in data:
    d.update(d.pop('fields'))

Вам нужно всего лишь "вытолкнуть" элемент из словаря и добавить внутренние данные значения ключа вбазовый уровень.Метод update сделает последний как операцию на месте.

Теперь вы можете создать свой фрейм данных pandas с ожидаемыми столбцами:

In [5]: pd.DataFrame(data)
Out[5]: 
   follower_count  model  name  pk profile_image         unique_key
0            2395  class  john  48                 9f030ed1d5e56523
1             264  class  dais  49                0e8256ad7f27270eb

0 голосов
/ 07 февраля 2019

Похоже, что это данные, которые вы можете сгладить с помощью цикла for:

new_data = []

for item in data:
    new_entry = {}
    for k,v in item.items():
        # a dictionary will return True for isinstance(v, dict)
        if not isinstance(v, dict):
            # v is not a dictionary here
            new_entry[k] = v
        else:
            # v is a dictionary, so we flatten it
            for a,b in v.items():
                new_entry[a] = b

    new_data.append(new_entry)

df = pd.DataFrame(new_data)

Внутренний цикл - это более обобщенный подход к использованию чего-то вроде if k=='Fields', который будет более специфичным для вашей проблемы.

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