【问题标题】:normalize google maps api json to pandas df将谷歌映射 api json 规范化为 pandas df
【发布时间】:2017-04-05 10:35:04
【问题描述】:

我使用 google maps api 获取美国国家公园的数据。我正在尝试将这些数据标准化为 pandas 数据框。

但这不起作用: table = pd.io.json.json_normalize(park_json) 并生成如下表格:

我最初尝试仅对结果列进行规范化,但它给出了以下错误:TypeError: list indices must be integers or slices, not str

然后我尝试:`new_table = pd.read_json((table['results']).to_json(), orient='index')' 但它错误:ValueError:数组必须都是相同的长度

有什么建议吗?谢谢!!!

示例 json: {'status': 'OK', 'results': [{'formatted_address': 'Acadia National Park, Mt Desert, ME 04660, USA', 'types': ['establishment', 'park', 'point_of_interest'], 'place_id': 'ChIJJSmiDrKjrkwRhFVV_A4i32I', 'address_components': [{'types': ['establishment', 'point_of_interest'], 'long_name': 'Acadia National Park', 'short_name': 'Acadia National Park'}, {'types': ['locality', 'political'], 'long_name': 'Mount Desert', 'short_name': 'Mt Desert'}, {'types': ['administrative_area_level_2', 'political'], 'long_name': 'Hancock County', 'short_name': 'Hancock County'}, {'types': ['administrative_area_level_1', 'political'], 'long_name': 'Maine', 'short_name': 'ME'}, {'types': ['country', 'political'], 'long_name': 'United States', 'short_name': 'US'}, {'types': ['postal_code'], 'long_name': '04660', 'short_name': '04660'}], 'geometry': {'location_type': 'APPROXIMATE', 'location': {'lng': -68.2733346, 'lat': 44.3385559}, 'viewport': {'southwest': {'lng': -68.4344785, 'lat': 44.2350589}, 'northeast': {'lng': -68.1591412, 'lat': 44.40370240000001}}}}]} {'status': 'OK', 'results': [{'formatted_address': 'Adams National Historical Park, 1250 Hancock St, Quincy, MA 02169, USA', 'types': ['establishment', 'museum', 'park', 'point_of_interest'], 'place_id': 'ChIJbbPB5rB844kR7hOzzjBr4Cs', 'address_components': [{'types': ['establishment', 'point_of_interest'], 'long_name': 'Adams National Historical Park', 'short_name': 'Adams National Historical Park'}, {'types': ['street_number'], 'long_name': '1250', 'short_name': '1250'}, {'types': ['route'], 'long_name': 'Hancock Street', 'short_name': 'Hancock St'}, {'types': ['locality', 'political'], 'long_name': 'Quincy', 'short_name': 'Quincy'}, {'types': ['administrative_area_level_2', 'political'], 'long_name': 'Norfolk County', 'short_name': 'Norfolk County'}, {'types': ['administrative_area_level_1', 'political'], 'long_name': 'Massachusetts', 'short_name': 'MA'}, {'types': ['country', 'political'], 'long_name': 'United States', 'short_name': 'US'}, {'types': ['postal_code'], 'long_name': '02169', 'short_name': '02169'}], 'geometry': {'location_type': 'APPROXIMATE', 'location': {'lng': -71.00379099999999, 'lat': 42.252297}, 'viewport': {'southwest': {'lng': -71.00513998029149, 'lat': 42.2509480197085}, 'northeast': {'lng': -71.00244201970848, 'lat': 42.25364598029149}}}}]}

【问题讨论】:

  • 您想要哪些数据? geometry 还是 address_components?
  • 几何,谢谢!

标签: python json google-maps-api-3 normalize


【解决方案1】:

使用结构合理的 json,您可以这样做:

import json
import pandas

df = pandas.DataFrame(json.load(open('example.json', 'r')).items())

顶级 json 属性名称将位于第 0 列,对应的值位于第 1 列。这也适用于嵌套在原始对象中的任何 json 对象。我无法让它与您的 json 示例一起使用,但它确实可以与这里的第一个示例 json 一起使用:http://jsonapi.org/examples/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 2020-12-11
    • 2011-02-10
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多