Я пытаюсь извлечь данные о высоте из API карт Google по пути, указанному координатами широты и долготы, следующим образом:
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)
и вот что я хочу:
Я не уверен, возможно ли это, но главным образом то, что я ищу, - это способ объединить данные высот, широты и долготы в кадр данных pandas (необязательно иметь причудливые мутилиновые заголовки).
Если кто-то может помочь или дать совет по работе с этими данными, это было бы здорово! Если вы не можете сказать, что я мало работал с данными 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
в конечном итоге датафрейм имеет столбцы широта, долгота, высота
python
json
google-maps
pandas
pbreach
источник
источник
Ответы:
Я нашел быстрое и простое решение , что я хотел с использованием
json_normalize()
включенных вpandas 1.01
.Это дает хороший сплющенный фрейм данных с данными json, которые я получил от API Карт Google.
источник
pd.DataFrame.from_records()
как описано здесь stackoverflow.com/a/33020669/1137803Проверьте этот отрывок.
Надеюсь, поможет :)
источник
Сначала вы можете импортировать данные JSON в словарь Python:
Затем измените данные на лету:
Перестройте строку json:
В заключение :
Вы также можете избежать вывода данных обратно в строку. Я полагаю, что Panda может напрямую создать DataFrame из словаря (я давно его не использовал: p)
источник
Просто новая версия принятого ответа, так как
python3.x
не поддерживаетurllib2
источник
Проблема состоит в том, что у вас есть несколько столбцов во фрейме данных, которые содержат в себе слова с меньшими значениями. Полезный Json часто сильно вложен. Я пишу небольшие функции, которые выводят нужную информацию в новый столбец. Таким образом, у меня есть это в формате, который я хочу использовать.
источник
В принятом ответе есть некоторые функциональные проблемы, поэтому я хочу поделиться своим кодом, который не использует urllib2:
Вывод:
PS: API для датских цен на электроэнергию
источник
Вот небольшой вспомогательный класс, который преобразует JSON в DataFrame и обратно: Надеюсь, вы найдете это полезным.
источник
Решение billmanH помогло мне, но не работало, пока я не переключился с:
чтобы:
вот и все остальное, преобразование в словарь полезно для работы с данными JSON.
источник
источник
Как только вы получите сплющенное,
DataFrame
полученное в результате принятого ответа, вы можете сделать столбцыMultiIndex
(«причудливый многострочный заголовок») следующим образом:источник