2 嵌套字典 Json 格式使用 Json_norminalize 使用 python
Posted
技术标签:
【中文标题】2 嵌套字典 Json 格式使用 Json_norminalize 使用 python【英文标题】:2 Nested Dictionaries Json format using Json_norminalize using python 【发布时间】:2021-09-07 18:12:21 【问题描述】:您好,我正在尝试检索此数据,其中有 2 个嵌套字典:
"metadata":
"stations": [
"id": "S108",
"device_id": "S108",
"name": "Kuala Lumpur",
"location":
"latitude": 3.1390,
"longitude": 101.6869
,
"id": "S118",
"device_id": "S118",
"name": "Bukit Bintang",
"location":
"latitude":3.1468,
"longitude": 101.7113
],
"reading_type": "DBT 1M F",
"reading_unit": "deg C"
,
"items": [
"timestamp": "2021-06-20T15:05:00+08:00",
"readings": [
"station_id": "S108",
"value": 32.6
,
"station_id": "S118",
"value": 30.3
]
]
我想得到这样的结果: Result
我尝试了几种方法:
data = airtemp.json()
df = pd.json_normalize(data,record_path=['metadata', 'stations'])
df
data = airtemp.json()
df1 = pd.json_normalize(data,record_path=['items','readings'])
df1
有没有一种方法可以使用 json_norminalize 形成一个包含 station_id、名称、纬度、经度、时间戳和值的表,而不会分成 2 个表?
非常感谢!
【问题讨论】:
【参考方案1】:你可以merge
你创建的两个数据框:
import pandas as pd
data =
"metadata":
"stations": [
"id": "S108",
"device_id": "S108",
"name": "Kuala Lumpur",
"location":
"latitude": 3.1390,
"longitude": 101.6869
,
"id": "S118",
"device_id": "S118",
"name": "Bukit Bintang",
"location":
"latitude": 3.1468,
"longitude": 101.7113
],
"reading_type": "DBT 1M F",
"reading_unit": "deg C"
,
"items": [
"timestamp": "2021-06-20T15:05:00+08:00",
"readings": [
"station_id": "S108",
"value": 32.6
,
"station_id": "S118",
"value": 30.3
]
]
stations = pd.json_normalize(data, record_path=['metadata', 'stations'])
readings = pd.json_normalize(data, record_path=['items', 'readings'])
result = stations.merge(readings, left_on='id', right_on='station_id')
with pd.option_context('display.max_rows', None, 'display.max_columns', None):
print(result)
输出:
id device_id name location.latitude location.longitude \
0 S108 S108 Kuala Lumpur 3.1390 101.6869
1 S118 S118 Bukit Bintang 3.1468 101.7113
station_id value
0 S108 32.6
1 S118 30.3
您提供的数据中只有一个timestamp
,因此您必须单独获取它。
【讨论】:
哇!!这看起来很棒!我正在尝试从 json 文件格式中提取时间戳,并且一直无法提取时间戳。有没有办法提取现有代码中的时间戳?非常抱歉,我应该在问题陈述中说明。 数据中是否只有一个时间戳,或者是否有多个时间戳,即更多项目和每个项目的时间戳?如果只有一个使用timestamp = data['items'][0]['timestamp']
以上是关于2 嵌套字典 Json 格式使用 Json_norminalize 使用 python的主要内容,如果未能解决你的问题,请参考以下文章
嵌套的 JSON 数据将导致使用 NS 字典(在 Swift 中)崩溃
python读取json格式文件大量数据,以及python字典和列表嵌套用法详解
python读取json格式文件大量数据,以及python字典和列表嵌套用法详解