Pandas将多个属性的JSON转换为DataFrame
我有一些JSON数据,这些数据是由属性(列)和每个属性的元素(数据)组成的。
[
{
"attribute_id": "a1",
"attribute_name": "Profailkir Idkir",
"elements":[
{
"formValues": [
"0000a634940"
],
"id": "0000a634940"
},
{
"formValues": [
"0000c84724"
],
"id": "0000c84724"
}]
},
{
"attribute_id": "a2",
"attribute_name": "Profailkir Nama",
"elements":[
{
"formValues": [
"'AFIFAH BINTI KHAIRUL JUBRI"
],
"id": "'AFIFAH BINTI KHAIRUL JUBRI"
},
{
"formValues": [
"'AINUN JARIAH BINTI HASHIM"
],
"id": "'AINUN JARIAH BINTI HASHIM"
}]
}
]
但是当我尝试使用
import pandas as pd
df = pd.DataFrame(data)
print(df)
时,结果只是追加了数据,而没有提取出表单的值。
我该如何将其转换为下面这种格式的数据框?
Profailkir Idkir | Profailkir Nama | |
---|---|---|
0 | 0000a634940 | 'AFIFAH BINTI KHAIRUL JUBRI |
1 | 0000c84724 | 'AINUN JARIAH BINTI HASHIM |
1 个回答
1
假设你想从每个元素中获取 id
的值,你可以用一种叫做字典推导的方法来重新整理你的数据:
df = pd.DataFrame({ e['attribute_name'] : [ v['id'] for v in e['elements'] ] for e in data })
输出结果:
Profailkir Idkir Profailkir Nama
0 0000a634940 'AFIFAH BINTI KHAIRUL JUBRI
1 0000c84724 'AINUN JARIAH BINTI HASHIM
如果你想要 formValues
(并且它们在每个属性中长度相同),你可以稍微修改一下代码:
df = pd.DataFrame({ e['attribute_name'] : sum([v['formValues'] for v in e['elements'] ], []) for e in data })
对于你的示例数据,结果是一样的。