Поскольку JSON не преобразуется напрямую в DataFrame
.read_json
работает только с несколькими форматами, определенными параметром orient
.Ваш JSON не соответствует ни одному из разрешенных форматов, поэтому вам нужно манипулировать JSON перед преобразованием его во фрейм данных.
Давайте рассмотрим ваш JSON на высоком уровне:
{
"displayFieldName": ...,
"fieldAliases": {...},
"fields": {...},
"features": [...]
}
Я пойму догадку и предположу, что узел features
- это то, что вам нужно.Давайте разберемся глубже в features
:
"features": [
{
"attributes": {
"OBJECTID": 1,
"SHELTER_ID": 223259,
...
}
},
{
"attributes": {
"OBJECTID": 2,
"SHELTER_ID": 223331,
...
}
},
...
]
features
содержит список объектов, каждый из которых имеет узел attributes
.Данные, содержащиеся в узле attributes
, - это то, что вам на самом деле нужно.
Вот код
import pandas as pd
import json
from urllib.request import urlopen
json_file = "https://gis.fema.gov/arcgis/rest/services/NSS/OpenShelters/MapServer/0/query?where=1%3D1&outFields=*&returnGeometry=false&outSR=4326&f=json"
data = urlopen(json_file).read()
raw_json = json.loads(data)
formatted_json = [feature['attributes'] for feature in raw_json['features']]
formatted_json
- теперь список словарей, содержащих данные, которые мы ищем.Это больше не JSON.Чтобы создать фрейм данных:
df = pd.DataFrame(formatted_json)