用嵌套词典创建熊猫数据框

时间:2020-08-06 13:27:43

标签: python pandas dataframe dictionary

我有一个字典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 个答案:

答案 0 :(得分:4)

可以按照注释中提到的@dm2的方式以更简单的方式进行操作。这里的d是具有数据的字典

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

要创建rank

dfz['rank']=dfz.index

答案 1 :(得分:2)

尝试一下

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

答案 2 :(得分:1)

如果您希望索引和排名成为两个不同的列

  1. 根据数据创建数据框
df = pd.DataFrame(data.values())
  1. 只需在数据框中添加一个排名列
df['rank'] = data.keys()

OR

要在一行中使用assign方法

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

如果您希望索引和排名在同一列

  1. 以转置顺序创建数据框
df = pd.DataFrame(data).T
  1. 重命名索引
df.index.names = ['rank']

应该可以。

答案 3 :(得分:0)

尝试遍历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)