Создание кадра данных pandas из вложенных словарей - PullRequest
0 голосов
/ 06 августа 2020

У меня есть словарь data, который имеет такую ​​структуру:

{
    1: {
        'title': 'Test x Miss LaFamilia - All Mine [Music Video] | Link Up TV',
        'time': '2020-06-28T18:30:06Z',
        'channel': 'Link Up TV',
        'description': 'SUB & ENABLE NOTIFICATIONS for more:  Visit our clothing store:  Visit our website for the latest videos: ...',
        'url': 'youtube',
        'region_searched': 'US',
        'time_searched': datetime.datetime(2020, 8, 6, 13, 6, 5, 188727, tzinfo = < UTC > )
    },
    2: {
        'title': 'Day 1 Highlights | England Frustrated by Rain as Babar Impresses | England v Pakistan 1st Test 2020',
        'time': '2020-08-05T18:29:43Z',
        'channel': 'England & Wales Cricket Board',
        'description': 'Watch match highlights of Day 1 from the 1st Test between England and Pakistan at Old Trafford. Find out more at ecb.co.uk This is the official channel of the ...',
        'url': 'youtube',
        'region_searched': 'US',
        'time_searched': datetime.datetime(2020, 8, 6, 13, 6, 5, 188750, tzinfo = < UTC > )
    }

Я пытаюсь создать pandas DataFrame, который будет выглядеть так:

rank    title                             time                      channel             description                                     url                             region_searched         time_searched
1       Test x Miss LaFamilia...          2020-06-28T18:30:06Z      Link Up TV          SUB & ENABLE NOTIFICATIONS for more...          youtube.com                     US                      2020-8-6 13:06:05
2       Day 1 Highlights | E...           2020-08-05T18:29:43       England & ..        Watch match highlights of D                     youtube.com                     US                      2020-8-6 13:06:05

В моем data словаре каждый key должен быть rank записью в моем DataFrame, а каждый key внутри родительского key - это запись, имя столбца которой - key, а их значение - value, который содержит key.

Когда я просто запускаю:

df = pd.DataFrame(data)

df выглядит так:

                 1                                                  2
title            Test x Miss LaFamilia - All Mine [Music Video]...  Day 1 Highlights | England Frustrated by Rain ...
time             2020-06-28T18:30:06Z                               2020-08-05T18:29:43Z
channel          Link Up TV                                         England & Wales Cricket Board
description      SUB & ENABLE NOTIFICATIONS for more: http://go...  Watch match highlights of Day 1 from the 1st T...
url              youtube.com/watch?v=YB3xASruJHE                    youtube.com/watch?v=xABoyLxWc7c
region_searched  US                                                 US
time_searched    2020-08-06                                         2020-08-06

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

Ответы [ 4 ]

4 голосов
/ 06 августа 2020

Это можно сделать гораздо проще, например @ dm2 , упомянутого в комментариях. Здесь d - это словарь, в котором есть данные

df=pd.DataFrame(d)
dfz=df.T

Для создания rank столбца

dfz['rank']=dfz.index
2 голосов
/ 06 августа 2020

попробуйте это,

import pandas as pd

pd.DataFrame(data.values()).assign(rank = data.keys())

                                               title  ... rank
0  Test x Miss LaFamilia - All Mine [Music Video]...  ...    1
1  Day 1 Highlights | England Frustrated by Rain ...  ...    2
1 голос
/ 06 августа 2020

Если вы хотите, чтобы индекс и ранг были двумя разными столбцами

  1. Создайте фрейм данных из данных
df = pd.DataFrame(data.values())
Просто добавьте столбец ранга в фрейм данных
df['rank'] = data.keys()

ИЛИ

Для этого в одной строке используйте assign метод

df = pd.DataFrame(data.values()).assign(rank = data.keys())

Если вы хотите, чтобы индекс и ранг были в одном столбце

  1. Создайте фрейм данных, но в порядке транспонирования
df = pd.DataFrame(data).T
Переименуйте индекс
df.index.names = ['rank']

Должно работать.

0 голосов
/ 06 августа 2020

Попробуйте выполнить цикл по клавишам dict и добавить новый df для каждого значения. (замените объект "dict" на вашу переменную)

df_full = pd.DataFrame()
for key in dict.keys():
    df_temp = pd.DataFrame(dict[key])
    df_full = pd.concat([df_full, df_temp], axis=0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...