从嵌套字典对象列表创建DataFrame

时间:2019-02-06 21:37:39

标签: python pandas dataframe

我在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

我一直在寻找帮助,但发现this,但问题是该列表没有keys()函数。

2 个答案:

答案 0 :(得分:0)

看起来这是可以使用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'之类的更通用的方法,该方法将更加针对您的问题

答案 1 :(得分:0)

假设您只有1级嵌套字典,并且您知道键名:

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

您只需要从字典中“弹出”元素并将内部键值数据添加到基本级别即可。 update方法将后者用作就地操作。

现在,您可以使用期望的列创建熊猫数据框:

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