我想要做的是沿着由纬度和经度坐标指定的路径从谷歌地图 API 中提取高程数据,如下所示:
from urllib2 import Request, urlopen import json path1 = '42.974049,-81.205203|42.974298,-81.195755' request=Request('http://maps.googleapis.com/maps/api/elevation/json?locations='+path1+'&sensor=false') response = urlopen(request) elevations = response.read()
这给了我一个看起来像这样的数据:
elevations.splitlines() ['{', ' "results" : [', ' {', ' "elevation" : 243.3462677001953,', ' "location" : {', ' "lat" : 42.974049,', ' "lng" : -81.205203', ' },', ' "resolution" : 19.08790397644043', ' },', ' {', ' "elevation" : 244.1318664550781,', ' "location" : {', ' "lat" : 42.974298,', ' "lng" : -81.19575500000001', ' },', ' "resolution" : 19.08790397644043', ' }', ' ],', ' "status" : "OK"', '}']
当作为 DataFrame 放入时,我得到的是:
pd.read_json(elevations)
这就是我想要的:
我不确定这是否可能,但主要是我正在寻找一种能够将海拔、纬度和经度数据放在熊猫数据框中的方法(不必有花哨的多行标题)。
如果有人可以帮助或就使用这些数据提供一些建议,那就太好了!如果你不能告诉我之前没有太多处理过 json 数据......
编辑:
这种方法并不是那么吸引人,但似乎有效:
data = json.loads(elevations) lat,lng,el = [],[],[] for result in data['results']: lat.append(result[u'location'][u'lat']) lng.append(result[u'location'][u'lng']) el.append(result[u'elevation']) df = pd.DataFrame([lat,lng,el]).T
最终数据框具有纬度,经度,海拔列
我找到了一个快速简单的解决方案来解决我想要使用json_normalize()的pandas 1.01.
json_normalize()
pandas 1.01
from urllib2 import Request, urlopen import json import pandas as pd path1 = '42.974049,-81.205203|42.974298,-81.195755' request=Request('http://maps.googleapis.com/maps/api/elevation/json?locations='+path1+'&sensor=false') response = urlopen(request) elevations = response.read() data = json.loads(elevations) df = pd.json_normalize(data['results'])
这提供了一个很好的扁平数据框,其中包含我从 Google Maps API 获得的 json 数据。