Превращение JSON в датафрейм с пандами - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь получить фрейм данных, но продолжаю сталкиваться с различными сообщениями об ошибках в зависимости от аргументов, которые я указываю в read.json после того, как я укажу свой файл.

Я просмотрел множество аргументов в документации по pandas.read_json, но не смог найти решение.

import pandas
json_file = "https://gis.fema.gov/arcgis/rest/services/NSS/OpenShelters/MapServer/0/query?where=1%3D1&outFields=*&returnGeometry=false&outSR=4326&f=json"
pandas.read_json(json_file)

Я пытаюсь получить фрейм данных, но продолжаю сталкиваться с различными сообщениями об ошибках в зависимости от аргументов, которые я указываю в read.json после того, как я укажу свой файл.

1 Ответ

0 голосов
/ 09 июля 2019

Поскольку 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...