O que estou tentando fazer é extrair dados de elevação de uma API do google maps ao longo de um caminho especificado pelas coordenadas de latitude e longitude da seguinte maneira:
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()
Isso me dá um dado parecido com este:
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"',
'}']
ao colocar como DataFrame, aqui está o que recebo:
pd.read_json(elevations)
e aqui está o que eu quero:
Não tenho certeza se isso é possível, mas principalmente o que estou procurando é uma maneira de reunir os dados de elevação, latitude e longitude em um dataframe de pandas (não precisa ter cabeçalhos de mutilina sofisticados).
Se alguém puder ajudar ou dar alguns conselhos sobre como trabalhar com esses dados, isso seria ótimo! Se você não pode dizer que eu não trabalhei muito com dados json antes ...
EDITAR:
Este método não é tão atraente, mas parece funcionar:
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
termina o dataframe com colunas latitude, longitude, elevação
fonte
Respostas:
Encontrei uma solução rápida e fácil para o que eu queria usar
json_normalize()
incluídopandas 1.01
.Isso fornece um bom quadro de dados nivelado com os dados json que obtive da API do Google Maps.
fonte
pd.DataFrame.from_records()
como descrito aqui stackoverflow.com/a/33020669/1137803Confira este recorte.
Espero que ajude :)
fonte
Você pode primeiro importar seus dados json em um dicionário Python:
Em seguida, modifique os dados rapidamente:
Reconstrua a sequência json:
Finalmente :
Você também pode evitar despejar dados de volta para uma string. Suponho que o Panda possa criar diretamente um DataFrame a partir de um dicionário (não o uso há muito tempo: p)
fonte
Apenas uma nova versão da resposta aceita, pois
python3.x
não suportaurllib2
fonte
O problema é que você tem várias colunas no quadro de dados que contêm dictos com dictos menores dentro deles. Json útil geralmente é muito aninhado. Escrevi pequenas funções que puxam as informações que desejo para uma nova coluna. Dessa forma, eu tenho no formato que eu quero usar.
fonte
A resposta aceita tem alguns problemas de funcionamento, por isso quero compartilhar meu código que não depende do urllib2:
Resultado:
PS: API é para preços de eletricidade dinamarqueses
fonte
Aqui está uma pequena classe de utilitário que converte JSON em DataFrame e vice-versa: Espero que você ache isso útil.
fonte
A solução do billmanH me ajudou, mas não funcionou até que eu mudei de:
para:
aqui está o resto, converter para um dicionário é útil para trabalhar com dados json.
fonte
fonte
Depois de obter o nivelamento
DataFrame
obtido pela resposta aceita, você pode transformar as colunas em umMultiIndex
("cabeçalho multilinha sofisticado") como este:fonte