为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Python 从 JSON 嵌套列表和字符串数组中提取值

使用 Python 从 JSON 嵌套列表和字符串数组中提取值

慕婉清6462132 2023-03-16 17:05:34
我正在尝试从 JSON 数据集中从马萨诸塞州波士顿的多个社区中提取坐标,但我一直在尝试获取每个城市的第一个坐标对;下面是 Roslindale 坐标的缩小版。"features": [{    "type": "Feature",    "properties": {      "Name": "Roslindale",      "Acres": 1605.5682375,      "SqMiles": 2.51,    },    "geometry": {      "type": "MultiPolygon",      "coordinates": [        [          [            [              -71.125927174853857,              42.272013107957406            ],            [              -71.125927174853857,              42.272013107957406            ]          ]        ],        [          [            [              -71.125830766767592,              42.272212845889705            ],            [              -71.125830766767592,              42.272212845889705            ]          ]        ],        [          [            [              -71.125767203228904,              42.272315958536389            ],            [              -71.125767203228904,              42.272315958536389            ]          ]        ]      ]    }  },现在我已经提取了我想要使用的数据for data in boston_neighborhoods:    neighborhood_name = data['properties']['Name']    neighborhood_id = data['properties']['Neighborhood_ID']    neighborhood_size = data['properties']['SqMiles']    neighborhood_latlon = data['geometry']['coordinates']    neighborhood_lat = neighborhood_latlon    neighborhood_lon = neighborhood_latlon    neighborhoods = neighborhoods.append({'Neighborhood': neighborhood_name,                                          'Neighborhood_ID': neighborhood_id,                                          'SqMiles': neighborhood_size,                                          'Latitude': neighborhood_lat,                                          'Longitude': neighborhood_lon}, ignore_index=True)这将返回多个坐标对,但我只想要第一对,下面是我现在返回的示例输出:Latitude                   |           Longitude     --------------------------------------------------------[[[[-71.12592717485386,    |    [[[[-71.12592717485386, 42.272013107957406], [...  |    42.272013107957406], [...    
查看完整描述

1 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

可能有点矫枉过正,但是JMESPath查询嵌套的 JSON 结构真的很容易。

向下遍历文档,您首先需要获取数组 ( [*]) 中的每个元素,然后为每个元素选择项目并将其放入一个对象(Python 字典)中。您将选择下方的社区properties,然后选择Nameproperties.Name)。您对类似的嵌套属性执行相同的操作。

坐标位于其下geometry.coordinates,是坐标对数组的数组。

import jmespath

import pandas as pd


query = """

[*].{ 

    Neighborhood: properties.Name,

    Neighborhood_ID: properties.Neighborhood_ID, 

    SqMiles: properties.SqMiles, 

    Latitude: geometry.coordinates[0][0][0][0], 

    Longitude: geometry.coordinates[0][0][0][1] 

}

"""


compiled = jmespath.compile(query)

result = compiled.search(boston_neighborhoods)


df = pd.DataFrame.from_records(result)

#   Neighborhood Neighborhood_ID  SqMiles   Latitude  Longitude

# 0   Roslindale            None     2.51 -71.125927  42.272013


查看完整回答
反对 回复 2023-03-16
  • 1 回答
  • 0 关注
  • 221 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信