Python 将JSON(包括对象数组)转换为数据帧

Python 将JSON(包括对象数组)转换为数据帧,python,json,pandas,dataframe,Python,Json,Pandas,Dataframe,我对Python非常陌生(只是从R迁移过来),希望将列表转换为数据帧。在研究这个话题之后,我找到了很多答案,但没有一个能达到预期的效果 数据源于API,具有以下结构: [ { "id": "ID_ONE", "name": "NAME_ONE", "source": { "id": "AB", "value": "source AB" }, "topics":

我对Python非常陌生(只是从R迁移过来),希望将列表转换为数据帧。在研究这个话题之后,我找到了很多答案,但没有一个能达到预期的效果

数据源于API,具有以下结构:

[
    {
        "id": "ID_ONE",
        "name": "NAME_ONE",
        "source": {
            "id": "AB",
            "value": "source AB"
        },
        "topics": [
            {
                "id": "11",
                "value": "topic 11 "
            },
            {
                "id": "12",
                "value": "topic 12 "
            }
        ]
    },
    {
        "id": "ID_TWO",
        "name": "NAME_TWO",
        "source": {
            "id": "BC",
            "value": "source BC"
        },
        "topics": [
            {
                "id": "12",
                "value": "topic 12 "
            }
        ]
    }
]
在使用了
请求
json_normalize
之后,我得到了一个很好的数据框架,但是“主题”(作为字典列表)仍然是一系列列表

你对如何处理这份清单有什么建议吗


如果您认为其他数据结构在Python中处理这样的输出时更有用(来自R,我只是觉得使用数据帧和列表很舒服),我也会非常感谢您的任何评论或建议。

我想您已经做到了这一点

import pandas as pd
from pandas.io.json import json_normalize
df=json_normalize(CopyPastedFromQuestion)
可以在循环中再次序列化df.topics。但是,您需要对结果进行编码。一个可能的解决办法是

all_topics=pd.DataFrame()
for i,row in df.iterrows():
    try:
        topics=json_normalize(df['topics'].values[i])
        topics['parent_id']=row['id']
        all_topics=all_topics.append(topics)
    except:
        pass
final=pd.merge(df,all_topics, left_on='id', right_on='parent_id', how='left')

这可能有助于@EzerK,太好了,谢谢!那正是我要找的!谢谢你的例子!只要“主题”列表不是空的,它就可以正常工作。你知道如何捕捉这个错误吗?我已经编辑了这个例子;这将是一个猜测,因为我没有数据样本。增加了一个尝试。。除块外,并将连接更改为“左”