我收到了这样的json回复:
{
"id": 7,
"status": "Public",
"Options": [
{
"id": 8,
"pId": 7
},
{
"id": 9,
"pId": 10
}
]
}我正试着用pandas dataframe把它压平
df = pd.DataFrame.from_dict(response_data)
#spliting production options
df=df.join(pd.DataFrame(df["Options"].values.tolist()).add_prefix('Options_'))
df = df.drop(columns=["Options"])
#spliting nested product options
df=df.join(pd.DataFrame(df["Options_0"].values.tolist()).add_prefix('Options0_'))
df = df.drop(columns=["Options_0"])此代码用于在响应只有一个Options时工作。
{
"id": 7,
"status": "Public",
"Options": [
{
"id": 8,
"pId": 7
}
]
}现在在json响应中有多个Options,如何迭代它并得到类似于
id status Options_0_id Options_0_pId Options_1_id Options_2_pId
7 Public 8 7 9 10 发布于 2022-11-11 21:21:45
让我们使用group函数将id、和pId值输入到列表中。
df = pd.DataFrame(response_data)
df=df.rename(columns={'id':'id_main'})
df=df.join(pd.json_normalize(df.pop('Options')))
df=df.groupby('id_main').agg({'status':'first','id':list,'pId':list})
print(df)
'''
status id pId
id_main
7 Public [8, 9] [7, 10]
'''现在,我们将将id和pId列转换为单独的数据格式,并在最后将它们与df合并。
a = pd.DataFrame(df.id.tolist(), index= df.index).rename('Options_{}_id'.format, axis=1)
print(a)
'''
Options_0_id Options_1_id
id_main
7 8 9
'''
#Let's do the same for the pId column.
b= pd.DataFrame(df.pId.tolist(), index= df.index).rename('Options_{}_pId'.format, axis=1)
print(b)
'''
Options_0_pId Options_1_pId
id_main
7 7 10
'''最后,让我们把这一切放在一起
df=df.join([a,b]).drop(['id','pId'],axis=1).reset_index()
print(df)
'''
id_main status Options_0_id Options_1_id Options_0_pId Options_1_pId
7 Public 8 9 7 10
'''如果您想按问题对列进行排序:
df=df.set_index(['id_main','status'])
df = df.sort_index(axis=1).reset_index()
print(df)
'''
id_main status Options_0_id Options_0_pId Options_1_id Options_1_pId
0 7 Public 8 7 9 10
'''还可以重命名id_main:
df=df.rename(columns={'id_main':'id'})https://stackoverflow.com/questions/74382327
复制相似问题