将JSON(包括对象数组)转换为pandas DataFrame

时间:2017-04-05 15:08:55

标签: python json pandas dataframe

我是Python的新手(只是从R迁移),并希望将列表转换为pandas DataFrame。在研究了这个主题后,我发现了许多答案,但没有一个能够产生预期的结果。

数据来自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 "
            }
        ]
    }
]

使用requestsjson_normalize之后,我最终获得了一个很好的DataFrame,但'主题'(作为词典列表)仍然是一系列列表。

您对如何处理此列表有任何建议吗?

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

1 个答案:

答案 0 :(得分:0)

我假设你到目前为止

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')