英文:
creating pandas df from disctionary in python
问题
我从API中获取的数据如下:
> {'Message': {'Success': True, 'ErrorMessage': ''},
> 'StoresAttributes': [{'StoreCode': '1004',
> 'Categories': [{'Code': 'Lctn',
> 'Attribute': {'Code': 'Long', 'Value': '16.99390523395146'}},
> {'Code': 'Lctn',
> 'Attribute': {'Code': 'Lat', 'Value': '52.56718450856377'}},
> {'Code': 'Offr', 'Attribute': {'Code': 'Bake', 'Value': 'True'}},
> {'Code': 'Pay', 'Attribute': {'Code': 'SCO', 'Value': 'True'}}]},
> {'StoreCode': '1005',
> 'Categories': [{'Code': 'Lctn',
> 'Attribute': {'Code': 'Long', 'Value': '14.2339250'}},
> {'Code': 'Lctn', 'Attribute': {'Code': 'Lat', 'Value': '53.8996090'}},
> {'Code': 'Offr', 'Attribute': {'Code': 'Bake', 'Value': 'True'}},
> {'Code': 'Pay', 'Attribute': {'Code': 'SCO', 'Value': 'True'}},
> {'Code': 'Offr', 'Attribute': {'Code': 'Bchi', 'Value': 'True'}}]}
我想从中创建一个数据框。我尝试使用循环或pd.DataFrame()函数,但它没有正常工作。
我想实现的是具有以下连续列的数据框:
StoreCode: 1004,
Long: 16.99,
Lat: 52.56,
Bake: True.
是否有人可以帮忙?
下面是我从json_normalize中获取的结果的屏幕截图。
英文:
I have data coming from API like below:
> {'Message': {'Success': True, 'ErrorMessage': ''},
> 'StoresAttributes': [{'StoreCode': '1004',
> 'Categories': [{'Code': 'Lctn',
> 'Attribute': {'Code': 'Long', 'Value': '16.99390523395146'}},
> {'Code': 'Lctn',
> 'Attribute': {'Code': 'Lat', 'Value': '52.56718450856377'}},
> {'Code': 'Offr', 'Attribute': {'Code': 'Bake', 'Value': 'True'}},
> {'Code': 'Pay', 'Attribute': {'Code': 'SCO', 'Value': 'True'}}]},
> {'StoreCode': '1005',
> 'Categories': [{'Code': 'Lctn',
> 'Attribute': {'Code': 'Long', 'Value': '14.2339250'}},
> {'Code': 'Lctn', 'Attribute': {'Code': 'Lat', 'Value': '53.8996090'}},
> {'Code': 'Offr', 'Attribute': {'Code': 'Bake', 'Value': 'True'}},
> {'Code': 'Pay', 'Attribute': {'Code': 'SCO', 'Value': 'True'}},
> {'Code': 'Offr', 'Attribute': {'Code': 'Bchi', 'Value': 'True'}}]},
And I want to make data frame from it. I have tried with loop or pd.DataFrame() function but it didn't work properly.
What I want to achieve is df with subsequent columns:
StoreCode: 1004,
Long: 16,99,
Lat: 52,56,
Bake: True.
Can please anyone help?
Below screen with my result from json_normalize
答案1
得分: 2
你可以使用 json_normalize
然后 pivot
:
import pandas as pd
data = {'Message': {'Success': True, 'ErrorMessage': ''}, 'StoresAttributes': [{'StoreCode': '1004', 'Categories': [{'Code': 'Lctn', 'Attribute': {'Code': 'Long', 'Value': '16.99390523395146'}}, {'Code': 'Lctn', 'Attribute': {'Code': 'Lat', 'Value': '52.56718450856377'}}, {'Code': 'Offr', 'Attribute': {'Code': 'Bake', 'Value': 'True'}}, {'Code': 'Pay', 'Attribute': {'Code': 'SCO', 'Value': 'True'}}]}, {'StoreCode': '1005', 'Categories': [{'Code': 'Lctn', 'Attribute': {'Code': 'Long', 'Value': '14.2339250'}}, {'Code': 'Lctn', 'Attribute': {'Code': 'Lat', 'Value': '53.8996090'}}, {'Code': 'Offr', 'Attribute': {'Code': 'Bake', 'Value': 'True'}}, {'Code': 'Pay', 'Attribute': {'Code': 'SCO', 'Value': 'True'}}, {'Code': 'Offr', 'Attribute': {'Code': 'Bchi', 'Value': 'True'}}]}]}
df = pd.json_normalize(data['StoresAttributes'], meta='StoreCode', record_path='Categories')
df.pivot(columns='Attribute.Code', values='Attribute.Value', index='StoreCode')
输出:
Attribute.Code Bake Bchi Lat Long SCO
StoreCode
1004 True NaN 52.56718450856377 16.99390523395146 True
1005 True True 53.8996090 14.2339250 True
英文:
You can use json_normalize
then pivot
:
import pandas as pd
data = {'Message': {'Success': True, 'ErrorMessage': ''}, 'StoresAttributes': [{'StoreCode': '1004', 'Categories': [{'Code': 'Lctn', 'Attribute': {'Code': 'Long', 'Value': '16.99390523395146'}}, {'Code': 'Lctn', 'Attribute': {'Code': 'Lat', 'Value': '52.56718450856377'}}, {'Code': 'Offr', 'Attribute': {'Code': 'Bake', 'Value': 'True'}}, {'Code': 'Pay', 'Attribute': {'Code': 'SCO', 'Value': 'True'}}]}, {'StoreCode': '1005', 'Categories': [{'Code': 'Lctn', 'Attribute': {'Code': 'Long', 'Value': '14.2339250'}}, {'Code': 'Lctn', 'Attribute': {'Code': 'Lat', 'Value': '53.8996090'}}, {'Code': 'Offr', 'Attribute': {'Code': 'Bake', 'Value': 'True'}}, {'Code': 'Pay', 'Attribute': {'Code': 'SCO', 'Value': 'True'}}, {'Code': 'Offr', 'Attribute': {'Code': 'Bchi', 'Value': 'True'}}]}]}
df = pd.json_normalize(data['StoresAttributes'], meta='StoreCode', record_path='Categories')
df.pivot(columns='Attribute.Code', values='Attribute.Value', index='StoreCode')
Output:
Attribute.Code Bake Bchi Lat Long SCO
StoreCode
1004 True NaN 52.56718450856377 16.99390523395146 True
1005 True True 53.8996090 14.2339250 True
答案2
得分: 0
你可以像这样使用`json_normalize()`函数:
```python
data = [
{"id": 1, "name": {"first": "Coleen", "last": "Volk"}},
{"name": {"given": "Mark", "family": "Regner"}},
{"id": 2, "name": "Faye Raker"},
]
pd.json_normalize(data)
输出:
id name.first name.last name.given name.family name
0 1.0 Coleen Volk NaN NaN NaN
1 NaN NaN NaN Mark Regner NaN
2 2.0 NaN NaN NaN NaN Faye Raker
你可以点击下面的链接了解更多关于json_normalize()
函数的信息。
<details>
<summary>英文:</summary>
You can use `json_normalize()` function like this:
```python
data = [
{"id": 1, "name": {"first": "Coleen", "last": "Volk"}},
{"name": {"given": "Mark", "family": "Regner"}},
{"id": 2, "name": "Faye Raker"},
]
pd.json_normalize(data)
Output:
id name.first name.last name.given name.family name
0 1.0 Coleen Volk NaN NaN NaN
1 NaN NaN NaN Mark Regner NaN
2 2.0 NaN NaN NaN NaN Faye Raker
You can refer to the below link to know more about the json_normalize()
function.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论