Python 将JSON(包括对象数组)转换为数据帧
我对Python非常陌生(只是从R迁移过来),希望将列表转换为数据帧。在研究这个话题之后,我找到了很多答案,但没有一个能达到预期的效果 数据源于API,具有以下结构: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":
[
{
"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,太好了,谢谢!那正是我要找的!谢谢你的例子!只要“主题”列表不是空的,它就可以正常工作。你知道如何捕捉这个错误吗?我已经编辑了这个例子;这将是一个猜测,因为我没有数据样本。增加了一个尝试。。除块外,并将连接更改为“左”